Form上をダブルクリックしてラベルやテキストボックスを生み出すにはどうしたらいいでしょうか?

解決


doradora  2006-01-03 14:09:01  No: 19474

おそれながら、Delphi初心者です。

アプリケーション実行中に、Form上をダブルクリックして新しくラベルやテキストボックスを生み出すにはどうすればいいでしょうか?
Delphiの文法には慣れてきたのですが、上記の件どうすれば実現できるか考えが及びません。
どうか御教授いただけないでしょうか。


Mr.XRAY  URL  2006-01-03 19:52:49  No: 19475

(1)Formのダブルクリックのイベントハンドラを作成する
(2)ラベルまたは他のコントロールを生成するコードを書く

ということになります.どこまでやって,どこがわかならないかわからないので.
両方とも.

(1) Formのダブルクリックのイベントの作成方法
    http://wblue.web.infoseek.co.jp/lecture/app/00/04-00.htm
    を参考にてください.ダブルクリックの場合は,OnDblClickです.
    
(2) コントロールを新規に生成する
    以下を参考にしてください.ここでは,ボタンのクリックで生成
    していますが,こけをFormのダブルクリックに置き換えます.
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_CreateComponent.htm


ハレ  2006-01-03 20:27:29  No: 19476

ラベルの例

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
    //ダブルクリック時の作成時以外で使用したい場合は、宣言しておく
    //LabelHogeHoge: TLabel;
  public
    { Public 宣言 }
    procedure LabelOnClick(Sender: TObject);
  end;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  //とりあえず表示できればいい場合は、こっちに宣言してもいい
  hogehoge: TLabel;
begin
  //Formを作成元(Owner:所有者)として、ラベルを一個作成
  //状況に応じて hogehoge と LabelHogeHoge を使い分けてください
  //基本的には、CreateとFreeはセットですが、Ownerの指定があるため、
  //ここでCreateしたコンポーネントを、自分でFreeする必要はありません。
  //FormがFreeされるときに、自動でFreeされます。
  hogehoge := TLabel.Create(Self);

  //Parentを設定して初めて表示可能になります
  //例えば、Panelがあり、その上に乗せたければ、Selfではなく Panel1 
  //とかを与えればヨシ
  hogehoge.Parent := Self;

  //位置指定とか各種プロパティ設定
  hogehoge.Top := 100;
  hogehoge.SetBounds(100,100,100,100);
  hogehoge.Caption := 'ほげ';
  //イベントとかも一緒
  //引数の型が一致しているなら、どんなメソッドでもOK
  hogehoge.OnClick := LabelOnClick;

  //こんな書き方もあるけど、個人的におすすめしない
  with TLabel.Create(Self) do begin
    Parent := Self;
    Top := 100;
  end;
end;

procedure TForm1.LabelOnClick(Sender: TObject);
begin
  TLabel(Sender).Caption := IntToStr(StrToIntDef(TLabel(Sender).Caption, 0) + 1);
end;


ハレ  2006-01-03 20:28:27  No: 19477

うほ・・・ひろげてしばらく放置している間にレスついてた・・・
消したい・・・(T.T)


doradora  2006-01-05 03:25:01  No: 19478

Mr.XRAYさん、ハレさん
ご指導、心より感謝いたします。
お二方のお陰で思い描いていた機能を実装することが出来ました。

Mr.XRAYさん
(2)でご紹介いただいたMr.XRAYさんのサイト、大変勉強になりました。
四方八方調べ尽くしたつもりだったのですが、これほど今件についてわかりやすく述べているページがあったとは…調べ方がまだまだ甘いですね。
今後も活用させていただきます。

ハレさん
提示いただいた例を試し、Create,Freeについての知識が深まりました。
また、不快な思いをさせてしまったようで誠に申し訳ございません…。

今機能については実現できたものの、また新たな壁が立ち塞がっております…。
自分なりに力を尽くした先に、また別スレを立て質問するかもしれません。
アドバイス頂ければ本当に助かります。
この度は、本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加