掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
生成したTPaintBoxに線を描画するには? (ID:20587)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
さどやまさん、再びの書き込みありがとうございます。 別スレッドで「えーと」さんが、大変示唆に富んだ発言をしてくださいました。 >コピペで動作しないのは、初歩の初歩です。イベントハンドラは、TForm 派生クラスのメソッドにすぎませんが、特別なことがあります。それは、オブジェクトインスペクタを通じて、イベントとハンドラが結びつけられていることです。この内容は *.dfm ファイルに記録されています。ですから、単なるコピペでは、この結びつきがないので、イベントが起きてもハンドラが呼び出されません。イベントハンドラをコピペするときは、まず、オブジェクトインスペクタで空のハンドラを生成し、それをコピペで上書きするといいです。 わかったこと: (1)イベントハンドラはTForm派生クラスのメソッドである (2)オブジェクトインスペクタを通じて、イベントとハンドラが結び付けられる (3)この内容は *.dfm ファイルに記録されている (4)単なるコピペでは、この結びつきがないので、イベントが起きてもハンドラが呼び出されない この点を意識して、さどやまさんのご説明を実験してみました。 ----- unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure MyClick(Sender: TObject); //TForm派生クラスのメソッド→オブジェクトインスペクタに表示された private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.MyClick(Sender: TObject); begin ShowMessage('MyClick Done'); end; end. ----- object Button1: TButton Left = 40 Top = 40 Width = 75 Height = 25 Caption = 'Button1' TabOrder = 0 OnClick = MyClick //さどやま様ご指摘のように設定されている end ----- この実験から、かなり分かってきました・・。 > (1)イベントハンドラはTForm派生クラスのメソッドである とあるので、TForm派生クラス内に宣言を書きました。 すると、オブジェクトインスペクタにMyClickメソッドが表示されるではありませんか! それを選択してOnClickに関連付けて、保存すると、OnClick = MyClick が記録されています。 「イベント」と「イベントハンドラ」が別にあるのか?という疑問についても 「イベントが起きてもハンドラが呼び出されない」 という表現から、別にあるのだろうと推察できますね。 この点は、いずれ当たり前のようにわかってくるのかもしれません。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.