http://www.netgocn.comオリジナル
すべてのボタンには、標準のWindowsプログラムに色がありません。したがって、Delphiが提供するすべてのボタンコンポーネントには、カラフルなプログラムインターフェイスを作成する場合があります。
ここでは、カスタムコンポーネントを使用してカラー属性を備えた方法を提供します。 Delphi自体が提供するコンポーネントと同様に、設計段階で自由に色を変更します(この記事のコードは、Delphi 4.0の下で行われます)。
最初のステップ
Delphiを開き、メニューのコンポーネント/新しいコンポーネントオプションを選択し、ポップアップダイアログボックスの先祖タイプのドロップダウンボックスに入りますこれに基づいて完了します。これは、コンポーネントの次のステップを定義します(これは、カスタムコンポーネントライティングの最初のステップでもあります)。ダイアログボックスの残りの書き込みコンテンツはあなたが好きなように入力されますが、クラス名は既存の(カスタマイズされた)クラス名と同じではないことに注意する必要があります。また、定義されていることも覚えておく必要があります。コンポーネントのインストールの場所(パレットページドロップダウンボックスのコンテンツ)とディスク上のユニットファイルの保存場所(ユニットファイル名編集ボックスのコンテンツ)この記事は、Delphi Tbutton1のデフォルト値をクラス名として取得します。
ステップ2
上記の作業を終えた後、Delphiは自動的に基本的なコンポーネントコードを生成します。 (この記事は削除されているだけです。すべて自動的に生成されたコメント)保存する必要があります。
ステップ3
上記のコードフレームワークにコードを追加します。もちろん、これは私たちがやりたい主な作業です。
1. Delphiによって自動的に生成されたユニットファイルのデータ型定義部分を次のように変更します。
タイプ
tbutton1 = class(tbutton)
プライベート
fcolor:tcolor;
fcanvas:tcanvas;
ISFOCUSED:BOOLEAN;
手順SetColor(値:TColor);
手順cndrawitem(varメッセージ:twmdrawitem);
保護されています
手順Createparams(var params:tcreateparams);
手順ButtonStyle(Adefault:Boolean);
公共
Constructor Create(aowner:tomponent);
破壊者はオーバーライドします。
公開
プロパティカラー:tcolor読み取りfcolor write setcolorデフォルトclwhite;
終わり;
説明:
A。
b。
c属性のプライベートデータドメインを読み取り、属性のセットカラーをプライベートセグメントに配置する必要があります。外部にアクセスできないクラスを作成します。
2。Delphiの自動プロセスレジスタは無視できます。プロセス本体の後、上記で定義したすべてのプロセスのプロセス本文を記入する前に、次のコードを手動で追加します(ここでは関数プロトタイプを定義しません)。
// ***コンストラクター************************************** **********
Constructor tbutton1.create(aowner:tcomponent);
始める
継承されたcreate(aowner);
fcanvas:= tcanvas.create;
fcolor:= clwhite; //デフォルト色
終わり;
// *** Destructor ********************************** ********
Destructor tbutton1.destroy;
始める
fcanvas.free;
継承された破壊;
終わり;
// ***ボタンスタイルを定義するには、ボタンを自己描画ボタンとして再定義する必要があります*****************
手順tbutton1.createparams(var params:tcreateparams);
始める
継承されたcreateparams(params);
パラメーションを使用するスタイル:= styleまたはbs_ownerdraw;
終わり;
// ***属性ライティング方法******************************** ********* *******
手順tbutton1.setcolor(value:tcolor);
始める
fcolor:= value;
無効;
終わり;
// ***ボタンステータスの設定******************************** ****** ****
手順tbutton1.setbuttonstyle(adefault:boolean);
始める
Adefault <> IsFocusedの場合
始める
ISFOCUSED:= AdeFault;
リフレッシュ;
終わり;
終わり;
// ***描画ボタン********************************** ******
手順tbutton1.cndrawitem(var message:twmdrawitem);
var
ISDown、isDefault:boolean;
arect:trect;
フラグ:Longint;
drawitemstruct:tdrawitemstruct;
WH:tsize;
始める
drawitemstruct:= message.drawitemstruct^;
fcanvas.handle:= drawitemstruct.hdc;
arect:= clientRect;
drawitemstructを使用して
始める
iSDown:= itemStateおよびODS_Selected <> 0;
isDefault:= itemStateおよびods_focus <> 0;
終わり;
フラグ:= dfcs_buttonpushまたはdfcs_adjustrect;
iSDownの場合、フラグ:=フラグまたはDFCS_PUSHED;
drawitemstruct.itemstateおよびods_disabled <> 0の場合
フラグ:=フラグまたはdfcs_inactive;
ISFOCUSEDまたはISDEFAULTの場合
始める
//ボタンが焦点を合わせたら状態を描きます
fcanvas.pen.color:= clwindowframe;
fcanvas.pen.width:= 1;
fcanvas.brush.style:= bsclear;
fcanvas.rectangle(arect.left、arect.top、arect.right、arect.bottom);
インフレーター(arect、-1、-1);
終わり;
fcanvas.pen.color:= clbtnshadow;
fcanvas.pen.width:= 1;
fcanvas.brush.color:= fcolor;
ISDownの場合、開始します
//ボタンが押されたらステータスを描画します
fcanvas.rectangle(arect.left、arect.top、arect.right、arect.bottom);
インフレーター(arect、-1、-1);
ENSEを終了します
//無効なボタンを描きます
DrawFrameControl(Drawitemstruct.hdc、arect、dfc_button、flags);
fcanvas.fillrect(arect);
//キャプションテキストコンテンツを描きます
fcanvas.font:= self.font;
arect:= clientRect;
wh:= fcanvas.textextent(caption);
fcanvas.pen.width:= 1;
fcanvas.brush.style:= bsclear;
有効になっていない場合
//ボタンが失敗したら、もう一度キャプションテキストを描画する必要があります
fcanvas.font.color:= clbtnhighlight;
fcanvas.textout((width div 2) - (wh.cx div 2)+1、
(高さdiv 2) - (wh.cy div 2)+1、
キャプション);
fcanvas.font.color:= clbtnshadow;
終わり;
fcanvas.textout((width div 2) - (wh.cx div 2)、(height div 2) - (wh.cy div 2)、キャプション);
//焦点を獲得したら、内側のフレームの点線を描画します
ISFOCUSEDおよびISDEFAULTの場合
始める
arect:= clientRect;
インフレーター(arect、-4、-4);
fcanvas.pen.color:= clwindowframe;
fcanvas.brush.color:= fcolor;
drawfocusRect(fcanvas.handle、arect);
終わり;
fcanvas.handle:= 0;
終わり;
//** 終わり ******************************************** ****************
終わり。
ステップ4:エラーが正しいことを確認した後、[デルファイ]メニューのコンポーネントオプションを選択します成分。
この記事を完全にフォローすると、正しくコンパイルしてインストールした後、DelphiコンポーネントラベルのサンプルタブにTbuttonと同じアイコンのボタンを見つけることができます。新しいプロジェクトを作成して、このボタンをフォームに配置します。それはどうですか?その色のプロパティを通して、あなたはその色を自由に設定します。
最後に、この記事のボタン描画方法では、DelphiのTbuttonと同様の描画方法を採用して、Delphiボタンと同様のアクションの外観を実現します。ただし、プレイしたい場合は、個性を表現したいFCANVASキャンバスにテキストとグラフィックを描画できます。
ご質問がある場合は、手紙を送信するか、メッセージを残してください。
このサイトのソフトウェアをお試しください:netgocn(ネットワーク)