名前 題名 ▼ takiさん > ▼ Mr.XRAYさん > > 今回質問しましたTStringListを例にすると > クラスはTStringListのプロパティ、イベント、メソッドを > 定義している。 > > SL1,SL2:TStringListの2つのオブジェクトを生成すると、 > > SL1,SL2毎にプロパティ、イベントのメモリ領域が確保される。 > また、SL1,SL2に共有のメソッドのコードが作成される。 > > 変数SL1,SL2には確保されたメモリ領域(= object?)のポインタが > 代入される。 > > 次に、イベントの手続きである > procedure TForm1.SLOnChange(Sender: TObject); > begin > ShowMessage(TStringList(Sender).Text+'を追加しました '); > end; > は、TFormクラスの中に作成されるコードでそのポインタは > TForm1.SLOnChangeの中に入っている。 > ※TFormの中に必ず記述する必要があるのでしょうか? > > SL1.OnChange:=SLOnChange; することで > > SL1のイベントのメモリ領域にTForm1.SLOnChangeのポインタが > 代入されて呼び出し可能になる。 > > その後、SL1に変化があると、SL1のポインタと共にイベントが > 呼び出される。 > > 呼び出されたTForm1.SLOnChange(Sender: TObject)のSenderには > SL1のポインタが入っている。 > > ただ、SL1はメモリのブロックなので、TStringList型でキャスト > しないとそれぞれの定義の情報にアクセスできない。 > > 同様に、SL2も > SL2.OnChange:=SLOnChange; すると > SL2が変化すると、SL2のポインタと共にイベントが呼ばれる。 > > だから、TForm1.SLOnChangeイベントのコードは1つだけど、 > Senderが変わるのでこの手続きを共有して使うことができる。 > > と、解釈しました・・・ どうでしょうか? GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link