掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
生成したTPaintBoxに線を描画するには? (ID:20589)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
えーとさん、丁寧な噛み砕いたご説明をありがとうございます。 私の「ことば」や「表現」「考える方向」をあえて使ってくださっているのでしょうか? 非常に分かりやすいです。 > > 「イベント」と「イベントハンドラ」が別にあるのか?という疑問についても > > 別にあるのです。 あぁ、別にあるのですね! やっと、すっきりしました。 > イベントとは、イベントハンドラを設定できるプロパティー > なのです。ヘルプで TButton の OnClick イベントをみてください。 > > property OnClick: TNotifyEvent; ありました! > となっているでしょう。で、この TNotifyEvent 型をさらにヘルプで見てみると > > type TNotifyEvent = procedure (Sender: TObject) of object; > > なっているでしょう。イベントはメソッド型の変数を代入できるプロパティー > なのです。 はい、確かに、コードを見ると代入してますね。 そして、代入されているのはprocedureですね。 これはメソッド型なんですね。 > 上のコードで MyClick をオブジェクトインスペクタで代入してますが、コードでも代入できます。 From1Create などで > > Button1.OnClick := MyClick; > > とするといいのです。 あ、これは「初期値の設定」の一環として、イベントをイベントハンドラに関連付けしているんですね。 ここまででイベントハンドラがどこに記述されているかがわかりました。 ----- type TForm1 = class(TForm) Button1: TButton; procedure MethodName(Sender: TObject); //これがイベントハンドラ(メソッドのひとつ) private { Private 宣言 } public { Public 宣言 } end; procedure TForm1.MethodName(Sender: TObject); begin //実行内容 end; ----- 次はイベントです。OnClickがイベントですが、 OnClickはクラス(オブジェクト)のプロパティです。 TButtonのソースを見ると、プロパティとして存在しています。 property OnClick; ただ、この先はたどれませんでした。 もしかしてたどらなくていいのかな? 別スレッドで疑問としてあげた、write read がなくて許されているのは、これがイベントだから? そうでないとしたら、IDEはどうやってイベントとわかるのだろう・・? 名前にOnがついているから、だったりして。 そうでなければ、どこかで定義されているはずで・・、それがproperty OnClick; かな? あぁ、どうどうめぐりしてますね。これは置いておこう。(苦笑) そして、イベントハンドラとイベントの関連付けは、dfmファイルの中です。 OnClick = MethodName これは、オブジェクトインスペクタで代入した場合ですね。 コードでも代入可能ということですね。例は「えーと」さんのご説明どおりです。 > これは文法的には OnClick プロパティーに TNotifyEvent 型の変数を代入しているのです。TButton の中では、Click イベントが起こるとこのプロパティーが設定されているかどうか見て、設定されているとそれを呼び出します。 なるほど、OnClickはプロパティなんですね。 やはり、プロパティの中にイベントがあるから、プロパティがイベントか判断して、そうである場合はイベントとして扱う、という流れのような気がする。 > このように、イベントとイベントハンドラは、プロパティーを通じて結びつけられます。 ありがとうございます。 たぶん、これで、ようやく、わかりました。 ・別物だということ。 ・その結び付け方 がわかりました。 みなさま、ありがとうございます! OnClickの記述場所というか、IDEはなぜイベントとわかるか?という点で疑問が残ってしまっている気がします。 みなさまに説明していただいているのに、理解が悪いのだと思います。 もう少し、時間を置いてみますが、私が疑問に感じていた部分が、ほとんど追跡できたように思います。 そして、見えてきた新たな課題は、上記でえーとさんがご説明くださったイベントの仕組みを、自分で実装することとなるのでしょうね。 もしかすると、これをトレースすることで「プロパティOnClickがイベント」を理解できるのかもしれません・・。 #別スレッドで話題がクロスしてしまっていますが、どうぞご了承ください。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.