Delphiの初心者、JavaまたはVCプログラミングのオブジェクト指向の知識と経験を持つ人々に適しています。
Delphiクラスでこのようなコードをよく見ることがよくあります:プロパティプロパティプロパティタイプの名前読み取り文字列1書き込み文字列2
ここの属性の名前は異なる場合があります。すべてがこの形式です:プロパティプロパティ名読み取り文字列1書き込み文字列2
私は左翼を取りました:integer読み取りfleft write setLeft。左は整数プロパティです。読み取り変数またはメソッドを宣言して変数にアクセスし、変数を変更するときにアクセスする変数またはメソッドを宣言します。注:変数またはメソッドになります。ここでは、Fleftと呼ばれる変数です。カプセル化の目的のために、私たちは通常、プライベートの真ん中にそのような変数を置きます。
fleft:integerコード(習慣の命名については、属性名の前にキャピタルfとしてこのような変数を名前を付けます)。このようにして、プロパティを読むと、実際にFleftの価値にアクセスしています。そのため、フレックスを変更し、左の値を間接的に変更する方法を記述できます。次に、ここではメソッドを見てみましょう(通常はセットが付いています)声明:
手順SetLeft(Value:Integer);
次のコード実装:
手順tcontrol.setLeft(value:integer);
始める
setbounds(value、ftop、fwidth、fheight);
含める(fscalingflags、sfleft);
終わり;
次のコードを左に変更すると、左:= 23、その後、セットバウンドは領域を変更する関数です左、新しい左に応じてエリアのサイズが変更され、この機能はFLEFTのサイズを参照してください。
手順tcontrol.setbounds(aleft、atop、width、aheight:integer);
始める
CheckNewSize(Awidth、Aheight)および
((aleft <> fleft)または(at top <> ftop)または
(awidth <> fwidth)または(aheight <> fheight))
始める
InvalidateControl(可視、false);
fleft:= aleft;
ftop:= atop;
fwidth:= awidth;
fheight:= aheight;
UpdateanChorrules;
無効;
実行(wm_windowposchanged、0、0);
RequestAlign;
そうでない場合(ComponentStateでのcsloading)、サイズを変更します。
終わり;
終わり;
このようにして、外部は属性の値が割り当て操作によってのみ変更されているように見えます。読み取りと書き込みは、デザインに応じて変数または機能です。もちろん、これを書くことができます。プロパティプロパティプロパティタイプ名変数1書き込み変数2。変数1と変数2は同じです。また、このプロパティプロパティプロパティタイプの名前を読む方法1つの書き込み方法2を実行することもできます。あなたのための任意の組み合わせ。しかし、注意すべきことは2つあります。
1.命名規則は、習慣に基づいて最適であり、読みやすいです。
2.変数の場合、タイプは属性のタイプと同じでなければなりません。
クリックイベントなど、コンポーネントのイベント属性をよく使用しますが、表面からどのように呼び出され、どのようにトリガーされるかを表面から確認することは困難です。以下に答えます。
Property Manager Object Inspectorでは、メソッドの名前がイベントページのオンクリックの右側に対応していることがわかります。実際、以前の方法に対応するコンポーネントのイベントを提供できます。フォームをform 1にします1。メソッドの入力パラメーターは特に重要であることに注意してください。
例としてtcontrolを使用しましょう。このコードを見つけます。
プロパティオンマウスタウン:上記に似たTMouseEvent FonMousedownを読みます。
tmouseEvent = procedure(sender:tobject; button:tmousebutton; shift:tshiftstate; x、y:integer)offert;
ご覧のとおり、それは実際には関数ですが、青い部分はエントリパラメーターに制限されます。次に、form1を割り当てます。次に、マウスメッセージをインターセプトし、直接的または間接的にfonmousedownを呼び出す関数を作成するだけで、メッセージと処理機能に対応します。ここでは、間接的に呼ばれる多くのレイヤーがあります。
以下は間接的な呼び出しプロセスです。
手順wmrbuttondblclk(varメッセージ:twmrbuttondblclk);
手順tcontrol.wmrbuttondblclk(var message:twmrbuttondblclk);
始める
継承;
domousedown(メッセージ、mbright、[ssdouble]);
終わり;
手順domousedown(var message:twmmouse; button:tmousebutton;
シフト:tshiftState);
手順tcontrol.domousedown(var message:twmmouse; button:tmousebutton;
シフト:tshiftState);
始める
そうでない場合(ControlStyleのcsnostdevents)
メッセージで
if(width> 32768)または(height> 32768)then
Calccursorposを使用して
Mousedown(ボタン、keyStoshiftState(キー) +シフト、x、y)
それ以外
Mousedown(Button、keyStoshiftState(keys) + shift、message.xpos、message.ypos);
終わり;
手順Mousedown(ボタン:TMouseButton; Shift:TshiftState;
x、y:整数);
手順TControl.Mousedown(ボタン:TMouseButton;
シフト:tshiftState; x、integer);
始める
割り当てられた場合(fonmousedown)、fonmousedown(self、button、shift、x、y);
終わり;
自分のクラスをもっと書くと、GetLeftを書くことなく、Javaのような脚本を書くことなく、テキストにアクセスして修正するときに呼び出す必要があります。そのうちは、control1.textを呼び出してアクセス、control1.text:= '特定の文字列'を変更して値を変更します。
メッセージの処理に関しては、Baseクラスは、OnClickやOnMousedownなどのプロパティを使用したい場合、公開されていると宣言し、Object Inspectorに表示され、処理方法を便利に書くことができます。 Javaのように複雑なリスナーを書くことなく、発信者関数に割り当てることはできません。
私の研究は深くありません。不適切な場合は修正してください:)。 [email protected]へようこそ