P>証券分析ソフトウェアの開発では、さまざまな在庫の分析曲線を描画する必要があることがよくあります。ソフトウェアの機能をより便利で柔軟にするために、ユーザーは好みに応じてさまざまな曲線の色をカスタマイズできることを望んでいます。 Word97の[フォーマット]メニューの下には、フォントダイアログボックスに同様の機能があります。ユーザーが[フォント]ダイアログボックスのカラードロップダウンボックスをクリックすると、さまざまな色の単純なパターンが表示されます。この処理の結果は、ドロップダウンボックスのみを提供するよりもはるかに優れています。カラー名付き。 1。カスタムカラーダイアログボックスの実装
Delphiでは、TCOMBOBOXを使用して同様の機能を実現できます。 TCOMBOBOXコンポーネントには、TCOMBOBOXの表示属性を決定するスタイル属性があります。 通常、csdropdown、cssimple、csdropdownlist、csownerdrowfixed、csownerdrawvariableなどを選択できます。 CSOWNDRAWFIXEDが選択されている場合、ドロップダウンボックスの各アイテムの高さがItemHeightプロパティによって決定されることを意味します。そして、TCOMBOBOXのOnDrawitemイベントでは、自己包囲プロセスに応答する必要があります。 ondrawitemは次のように定義されています。
PropertyOndRawitem:tdrawitemevent;
tdrawitemevent = procedure(control:twincontrol; index:integerrect:trect; state:townerdrawstate)of object;
3つのパラメーターの意味は次のとおりです。
コントロール:ドロップダウンボックスを含むTCOMBOBOX
インデックス:TCOMBOBOXのアイテムプロパティのセルフドローンドロップダウンボックスのインデックス番号
rect:自己描画の位置したがって、TCOMBOBOXの自己描画(rectパラメーター)とインデックス番号(インデックスパラメーター)である必要がある長方形の位置を知っています。そのキャンバス。 特定の実装プロセスは次のとおりです。
1。新しいプロジェクトファイルを作成し、デフォルトフォームの関連プロパティを次のように設定します。
キャプションカスタムドロップダウンボックス
名前フォーム1
PositionPosCreencenter
2。 2つのtcomboboxコンポーネントをフォームに配置し、次のようにプロパティを設定します。
namestyleitemheightondrawitem
colorcombo1csownerdrawfixed 20colorcombodrawitem
ColorCombo2CSOWNERDRAWFIXED 30COLORCOMBODRAWITEM
3。 ColorCombo1とColorCombo2のアイテムプロパティの横にあるドットボタンをダブルクリックし、[StringListeditor]ダイアログボックスに入力します。
黒
青
青と緑
明るい緑
赤
黄色
さまざまな色の名前
4。 colorcombo1のondrawitemイベント、yumanlu?
procedureTform1.colorcombodrawitem(control:twincontrol; index:integer; rect:trect; state:ownerdrawstate);
var
Tempcolor:Tcolor; //
tempbrushcolor:tcolor; //
始める
(controlastcombobox)を使用します
//コンボのキャンバスに描画します
始める
tempbrushcolor:= canvas.brush.color;
//元の色を保存します
canvas.fillrect(rect);
CaseIndexof //インデックスに従って異なる自己塗装色を定義します
0://黒
tempcolor:= clblack;
1://青
tempcolor:= clblue;
2://青と緑
tempcolor:= claqua;
3://明るい緑
tempcolor:= cllime;
4://赤
tempcolor:= clred;
5://黄色
TempColor:= Clyellow;
//他の色への応答はここに追加できます。
終わり;
canvas.brush.color:= tempcolor;
//自己描かれた色の長方形
canvas.rectangle(rect.left+4、
rect.top+1、
(rect.right+rect.left)div3、
rect.bottom 1);
canvas.brush.color:= tempbrushcolor;
//色に対応する文字列を表示します
canvas.textout((rect.left+rect.right)div2、
rect.top+1、
items [index]);
終わり;
終わり;
5。ファイルを保存して実行すると、Wordの色ドロップダウンボックスと同じ効果がわかります
興味のある読者は、記事に示されている場所に他の色を追加できます。
上記のプログラムは、delphi3.0、4.0で渡されます。 2。カスタムカラーダイアログコンポーネントを書きます
多くのDelphiプログラマーにとって、それは独自のDelphiコンポーネントの作成方法に非常に慣れていません。以下に、例としてカスタムカラーダイアログボックスを使用して、コンポーネントの書き込みを紹介します。 次のTcolorComboboxは、右側のドロップダウン矢印をクリックすると、対応するドロップダウンアイテムのさまざまな色をクリックします。 1.コンポーネントメニュー項目で新しいコンポーネントオプションを選択します。 AncestortypeボックスでTCOMBOBOXを選択し、クラス名ボックスにTCOLORCOMBOBOXを入力し、パレットページボックスでサンプルを選択し、UnitFileNameボックスのColorComboBox.pasを入力し、[OK]ボタンをクリックします。
2。コンポーネントメニュー項目でコンポーネントのインストールオプションを選択し、[intonewpackage]をクリックし、パッケージ名ボックスにパスとcolorcombodpk.dpkを書き込み、[OK]をクリックして[colorcombodpk.bplファイル]を生成します。
3. [ツール]メニューでImageEditorを使用して、編集ファイルColorCombox.dcrを作成し、TColorComboBoxクラスのビットマップを作成します。
4.作成後に実行されたcreatewndのフォントサイズと高さの仕様(Csowndrawfixedに設定)を追加します色。
5. drawitemで前に発生するdrawitemイベントに色の自己塗装プログラムを追加します。
実装手順は次のとおりです。
UnitColorComboBox;
インタフェース
用途
窓、メッセージ、sysutils、クラス、
グラフィック、コントロール、フォーム、ダイアログ、
stdctrls;
タイプ
tcolorcombobox = class(tcombobox)
プライベート
{privatedeclarations}
fondrawitem:tdrawitemevent;
proceduredRawitem(index:integer; rect:trect; stownerdrawstate);
保護されています
{ProtectedDeclarations}
公共
{publicdeclarations}
constructorcreate(aowner:tcomponent); override;
Procedurecreatewnd; Override;
公開
{公開されたdeclarations}
PropertyOndRawitem:tdrawitemevent
readfondrawitemwritefondrawitem;
終わり;
procedureregister;
実装
procedureregister; //登録コンポーネント
始める
RegisterComponents(サンプル、[tcolorcombobox]);
終わり;
ConstructortColorComboBox.create
(aowner:tcomponent); //コンポーネントの初期化
始める
相続財産(aowner);
スタイル:= csowndrawfixed; //初期タイプのコンポーネント
itemheight:= 20;
font.size:= 10;
終わり;
proceduretcolorcombobox.createwnd;
//色コンポーネントのアイテムプロパティを初期化します
始める
相続createwnd;
items.clear;
items.add(black);
items.add(青);
items.add(青と緑);
items.add(明るい緑);
items.add(ピンク);
items.add(red);
items.add(Yellow);
items.add(white);
items.add(濃い青);
items.add(cyan);
items.add(緑);
items.add(紫);
items.Add(Crimson Red);
items.add(深い黄色);
items.add(濃い灰色);
items.add(銀);
//それほど多くの色が必要ない場合は、コンポーネントのアイテム属性の不要な色を削除できます
終わり;
// drawitemプロセスをオーバーロードします
proceduretcolorcombobox.drawitem(index:integer; rect:trect; state:townerdrawstate);
var
Tempcolor:Tcolor; //
tempbrushcolor:tcolor; //
始める
//このコンポーネントのデフォルトのセルフペインティング設定
tempbrushcolor:= canvas.brush.color;
//元の色を保存します
canvas.fillrect(rect);
ifitems [index] = black
tempcolor:= clblack
elseifitems [index] =青
tempcolor:= clblue
elseifitems [index] = blue green then
tempcolor:=クラクア
elseifitems [index] =明るい緑色
tempcolor:= cllime
elseifitems [index] =ピンク
tempcolor:= clfuchsia
elseifitems [index] = red
tempcolor:= clred
elseifitems [index] = yellow
Tempcolor:= Clyellow
elseifitems [index] = white then
tempcolor:= clwhite
elseifitems [index] =ダークブルー
tempcolor:= clnavy
elseifitems [index] = cyan then
tempcolor:= clteal
elseifitems [index] =緑色
tempcolor:= clgreen
elseifitems [index] =紫
tempcolor:= clpurple
elseifitems [index] =クリムソン
tempcolor:= clmaroon
elseifitems [index] =深い黄色
TempColor:= Clolive
elseifitems [index] =濃い灰色
tempcolor:= clgray
elseifitems [index] = silver
elsetempcolor:= clsilver;
canvas.brush.color:= tempcolor;
//自己描かれた色の長方形
canvas.rectangle(rect.left+4、
rect.top+1、
(rect.right+rect.left)div3、
rect.bottom 1);
canvas.brush.color:= tempbrushcolor;
//色に対応する文字列を表示します
canvas.textout((rect.left+rect.right)div2、
rect.top+1、
items [index]);
終わり;
このコントロールは、カラーオプションを必要とするすべてのプログラムで使用でき、非常に便利で美しいです。 3。カスタムカラーダイアログコンポーネントの使用
カスタムカラーコンポーネントを登録した後、Delphiコンポーネントテンプレートのサンプルページからカスタムカラーコンポーネントを選択できますが、Delphi独自のコンポーネントを使用することに違いはありません。