1. 所有者と親の違い:
Parent プロパティはコンポーネントのコンテナを参照し、コンポーネントはこの範囲内でのみ表示および移動できます。例は次のとおりです。
(1) Form1 のフォーム上に、Panel1 を配置し、Panel1 を拡大します。
(2) パネル 1 にボタン 1 を配置します。
(3) Form1 に Button2 を配置します。
ここで、Panel1 を移動すると、Button1 はPanel1 と一緒に移動します。これは、Button1 の親がPanel1 であるためです。ここで、Button2 をPanel1 に移動し、再度、Panel2 を移動します。これは、Button2 の親が Form1 であるためです。フォームのデザインに加えて、コンポーネントを動的に作成する場合は、コンポーネントの親を指定する必要もあります。たとえば、上記の例の操作を続行します。
1) 手順 Tform1.Button2click(Sender:Tobjet);
2)ヴァール
3) ボタン:T ボタン;
4) 始める
5) ボタン:Tbutton.cerate(self);
6) ボタン.親=パネル1;
7) Button.lleft=0;
8) ボタン.トップ=0;
9) Button.caption:='OK';
10) 終了。
Button2 が押されると、Panel1 に Button が作成され、Button2 が押されると文 6 が Button.parent:=self; に変更されると、Form1 に Button が作成されます。文 6 を削除すると、Button2 を押しても何も起こりません。これは、作成メソッドがコンポーネントをどこに表示すべきかを認識できないためです。
Owner 属性は、コンポーネントの作成とリリースを担当するコンポーネントの所有者を指します。上の例のように、フォーム上のすべてのコンポーネントのシステムのデフォルトの所有者はフォームであり、フォームの所有者はアプリケーションです。ちなみに、create メソッドにはコンポーネントの所有者を表すパラメータが必要です。上記の例では、コンポーネントの所有者はフォーム、つまり self です。
Parent 属性と Owner 属性は実行時属性であり、実行時フェーズ中にコードを通じてのみ設定できます。
2. 自己と送信者の違い:
イベント ハンドラー パラメーター テーブルには、イベント ハンドラーをトリガーするコンポーネントを表す Sender パラメーターが少なくとも 1 つあります。Sender パラメーターを使用すると、複数のコンポーネントが同じイベント ハンドラーを共有できます。例として:
プロシージャ Tform1.Buttonclick(Sender:Tobject);
始める
送信者=ボタン1の場合、
Label1.caption:='コートの前に咲いて散る花を見てください
' Else Label2.caption:='空に広がる雲を眺めて'
終わり;
この例では、Button1 と Button2 が Buttonclick イベント ハンドラーを共有します。
Self は、プログラムがプログラムされるクラスを指します。そのため、クラスまたはコンポーネントを作成する場合、self はクラスまたはコンポーネントを指します。関数またはプロシージャの宣言で self がどのコンポーネントを表すかがわかります。つまり、最初の例では、self は Tform1 を表します。さらに、self はクラス メソッド内でのみ使用でき、プロシージャや関数内では使用できないことに注意してください。次の使用法は間違っています。
関数 a1(B:整数):整数;
始める
…
Button:=tbutton.create(self);……
終わり;
3. Clientheight と Height、Clientwidth と width の違い:
一般的なコンポーネントの場合、高さは Clientheight、幅は Clientwidth です。フォームの場合、高さはタイトル バーを含む高さであり、Clientheight はフォームのクライアント領域の高さを指します。同様に、Clientwidth はフォームのクライアント領域の幅を指定します。
上記の記述からわかるように、Delphi で正しくプログラミングするには、Ower と Parent、Self と Sender、Clientheight と Height、Clientwidth と width の違いを理解することが重要です。