Delphi でコントロールを記述する基本的な方法
Delphi プログラマとして、プログラミング レベルをさらに向上させたい場合は、コントロールの書き方をマスターする必要があります。この記事では、初心者向けにコントロールの基本的な書き方とパターンを簡単な例を通して紹介します。
このコントロール例は TLeiLabel と呼ばれるもので、TLabel をベースに、テキストを立体化する機能と、テキストにハイパーリンク属性を持たせる機能の 2 つを追加しています。これらの関数を段階的に実装してみましょう。
1.文字を立体的にする
まず、次のようにタイプ T3DEffect と属性 Style3D を定義します。
T3DEffect=(通常、上昇、下降、影付き);
PROperty Style3D:T3DEffect 読み取り FStyle3D 書き込み SetStyle3D デフォルト Normal;
次に、プライベートで変数「FStyle3D:T3DEffect;」を定義し、次のように SetStyle3D() メソッドを設定します。これは、メソッドを記述するための一般的な形式でもあります。
プロシージャ TLeiLabel.SetStyle3D(値: T3DEffect);
始める
FStyle3D <>値の場合
始める
FStyle3D := 値;
validate; // コントロールが再描画されることを示します。
終わり;
終わり;
さらに、影のあるテキストの場合、影のオフセット、ShadeXOffSet および ShadeYOffSet を定義する必要があります。
プロパティ ShadowXOffSet: 整数 読み取り FXOffSet 書き込み SetFXOffSet デフォルト 5;
プロパティ ShadowYOffSet: 整数 読み取り FYOffSet 書き込み SetFYOffSet デフォルト -5;
書き込みメソッド SetFXOffSet() および SetFYOffSet() は、上記の SetStyle3D() と似ています。
コントロールを再描画するには、通常、Paint メソッドをオーバーロードする必要があります。ここでは、DoDrawText メソッドをオーバーロードするだけです。
DoDrawText の宣言は Protected に配置されます。
プロシージャ DoDrawText(var Rect: TRect; Flags: Longint);
ここで DoDrawText() は 4 つのタイプ (通常、凸、凹、影) に応じて異なるテキストを描画します。
2. テキストにハイパーリンク属性を持たせる
リンク先の URL または電子メール アドレスを表す属性 URL を定義します。
プロパティ URL: 文字列読み取り FURL 書き込み SetURL;
SetURL メソッドを次のように記述します。
プロシージャ TLeiLabel.SetURL(値: 文字列);
始める
if FURL <> 値 then FURL := 値 ;
if FURL <> ' then
カーソル := crHandPoint;
終わり;
このラベルをクリックするときは、ブラウザまたはメール送受信ツールを開く必要があり、そのためには Click メソッドをオーバーロードする必要があります。
手順 クリック;
プロシージャ TLeiLabel.Click;
var s: 文字列;
始める
継承されたクリック。
FURL = ' の場合は終了します。
if LowerCase(Copy(FURL,1,7)) = 'http://' then
s := ファール
else if Pos('@',FURL) <> 0 then
s := 'mailto:' + FURL
それ以外
s := 'http://' + FURL;
ShellExecute(application.Handle, 'open', PChar(s), NIL, NIL, SW_SHOWNORMAL);
終わり;
一般的なハイパーリンクの場合、マウスを移動するとテキストの色が変わります。この目的のために、マウスが移動したときのテキストの色を示す属性 HoverColor を追加します。
プロパティ HoverColor : TColor 読み取り FHoverColor 書き込み SetHoverColor デフォルト clRed;
また、Windows メッセージ CM_MOUSEENTER および CM_MOUSEELEAVE (マウスのインとアウト) を受け取る 2 つのプロシージャも定義します。
プロシージャ CMMouseEnter(var メッセージ: TMessage); メッセージ CM_MOUSEENTER;
プロシージャ CMMouseLeave(var メッセージ: TMessage); メッセージ CM_MOUSELEAVE;
プロシージャ TLeiLabel.CMMouseEnter (変数メッセージ: TMessage);
始める
Enabled かつ Visible で getParentForm(Self).Active の場合
始める
FFontColor := Font.Color;
//文字の色を保存する
Font.Color := FHoverColor;
//文字の色を変更する
終わり;
終わり;
プロシージャ TLeiLabel.CMMouseLeave (Var Message: TMessage);
始める
Font.Color:=FFontColor;
// 文字の色を元に戻す
終わり;
属性のデフォルト値を設定するには、コンストラクター Create() をオーバーロードする必要もあります。コンストラクターをオーバーロードするときは、最初に祖先クラスのコンストラクターを呼び出す必要があることに注意してください。 Create() 構造をオーバーロードするプログラムは次のとおりです。
コンストラクター TLeiLabel.Create(AOwner: TComponent);
始める
継承された Create(AOwner);
// 祖先クラスのコンストラクターを最初に呼び出す必要があります
FStyle3D := 通常;
FXOffSet := 5;
FYOffSet := -5;
FHoverColor := clRed;
終わり;
最後に、このコントロールにアイコンを追加する必要があります。 Delphi のイメージ エディタを使用して 24×24 ビットマップを作成し、それを DCR ファイルとして保存できます。ファイル名はコントロールの Pas ファイル名と同じである必要があります。名前はすべて大文字です。