亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

用Delphi 實現自定義顏色對話框及其構件

2019-11-17 05:06:59
字體:
來源:轉載
供稿:網友
p>  在開發證券分析軟件中,經常要繪制各種股票的分析曲線。為了使得軟件的 功能更加方便.靈活,用戶希望能夠按照自己的喜好自定義各種曲線的顏色。在WORD97的[格式]菜單下的字體對話框中有類似的功能。當用戶單擊字體對話框中的顏色下拉框時,各種顏色的簡單圖案和字體的顏色名稱一起顯示出來,這樣處理的結果顯然比只提供一個裝有顏色名稱的下拉框效果要好的多。 一、自定義顏色對話框的實現
  在Delphi中,我們可以使用TComboBox 實現類似的功能。在TcomboBox構 件中有一個Style屬性, 決定TcomboBox的顯示屬性。 通??蛇x取csDropDown,CSSimple,csDropDownList, csOwnerDrawFixed,csOwnerDrawVariable等。其中當選取csOwnerDrawFixed時表示創建一個自畫下拉框,下拉框 的每一項的高度由ItemHeight屬性 決定。并且必須在TcomboBox的OnDrawItem事件中響應自畫過程。 OnDrawItem的定義為:
PRopertyOnDrawItem:TDrawItemEvent;
TDrawItemEvent =procedure(Control:TWinControl;Index:IntegerRect:TRect; State:TOwnerDrawState)ofobject;
其中的三個參數的含義為:
Control:  包含下拉框的TComboBox
Index:自畫的下拉框在TComboBox 的Items屬性中的索引號
Rect:自畫的位置   因此,知道了需要自畫的矩形的位置(Rect參 數)和在TComboBox中的索引號(Index參數),我們可以使用TcomboBox的Canvas屬性在其畫布上自畫。 具體的實現過程如下:
1.新建一個工程文件,設置其默認窗體的有關屬性為:
Caption 自定義下拉框
Name Form1
PositionpoScreenCenter
2 .在窗體中放置兩個TcomboBox構 件,設置其屬性如下:
NameStyleItemHeightOnDrawItem
ColorCombo1csOwnerDrawFixed 20ColorComboDrawItem
ColorCombo2csOwnerDrawFixed 30ColorComboDrawItem
3 .雙擊ColorCombo1和ColorCombo2 的Items屬性旁的圓點按紐,在StringListEditor對話框中輸入
黑色
藍色
藍綠
鮮綠
紅色
黃色
等各種顏色的名稱
4 .在ColorCombo1的OnDrawItem 事件中 肴縵麓?
procedureTForm1.ColorComboDrawItem(Control: TWinControl;Index:Integer;Rect:TRect;State:OwnerDrawState);
var
TempColor:TColor; //自畫顏色
TempBrushColor:TColor; //臨時顏色
begin
with(ControlasTComboBox)do
//在Combo的Canvas 上自畫
begin
TempBrushColor:=Canvas.Brush.Color;
//保存原來的的顏色
Canvas.FillRect(Rect);
caseIndexof//根據Index 的不同,定義不同自畫的顏色
0://黑色
TempColor:=clBlack;
1://藍色
TempColor:=clBlue;
2://藍綠
TempColor:=clAqua;
3://鮮綠
TempColor:=clLime;
4://紅色
TempColor:=clRed;
5://黃色
TempColor:=clyellow;
//可以在此加入對其它顏色的響應
end;

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]);
end;
end;
5 .保存,運行文件,我們可以看到和WORD中顏色下拉框相同的 效果
有愛好的讀者,可以在文中所示的位置加入對其它顏色處理。
以上程序在Delphi3.0,4.0 上通過。 二、 自定義顏色對話框構件的編寫

  對許多Delphi程序員來說,如何編寫自己的Delphi構件還是比較生疏的,Delphi構件實際上是從Tcomponent 類繼續發展而來,編寫構件實際就是編寫非凡的類。下面我們就以自定義顏色對話框為例介紹構件的編寫。   下面TColorComboBox是從TcomboBox 類繼續來的,當點擊右邊的下拉箭頭時彈出和下拉items對應的各種顏色自畫框。   1. 選中Component菜單項中的New Component選項。在AncestorType 框中選TcomboBox,在ClassName 框中填入TColorComboBox,在Palette Page框中選Samples,在UnitFileName框中填入ColorComboBox.pas, 然后點擊OK按鈕。
  2. 選中Component菜單項中的Install Component選項,點擊Intonewpackage,在package name框中寫入路徑和ColorComboDpk.dpk, 點擊ok,生成ColorComboDpk.bpl 文件。
  3. 使用Tools菜單中的ImageEditor 來創建編輯文件ColorComBox.dcr, 為TColorComboBox類建立位圖。
  4. 在Create中加入對字體大小高度的規定及對控件的Style 屬性(設成csOwnerDrawFixed) 的規定,在Create后執行的CreateWnd中初始化顏色的items,如 果不需要那么多顏色項,可以以后在生成控件的items 屬性中直接刪除不需要的顏色。
  5. 在DrawItem事件中加入顏色自畫程序,此事件在On DrawItem之前發生。
實現程序如下:
unitColorComboBox;
interface
uses
Windows,Messages,SysUtils,Classes,
Graphics,Controls,Forms,Dialogs,
StdCtrls;
type
TColorComboBox=class(TComboBox)
private
{Privatedeclarations}
FOnDrawItem:TDrawItemEvent;
procedureDrawItem(Index:Integer;Rect:TRect; State:TOwnerDrawState);override;
protected
{Protecteddeclarations}
public
{Publicdeclarations}
constrUCtorCreate(AOwner:TComponent);override;
procedureCreateWnd;override;
published
{Publisheddeclarations}
propertyOnDrawItem:TDrawItemEvent
ReadFOnDrawItemwriteFOnDrawItem;
end;
procedureRegister;

implementation

procedureRegister;//注冊構件
begin
RegisterComponents(Samples,[TColorComboBox]);
end;

constructorTColorComboBox.Create
(AOwner:TComponent);//構件的初始化
begin
inheritedCreate(AOwner);
Style:=csOwnerDrawFixed; //構件的初始類型
ItemHeight :=20;
Font.Size:=10;
end;

procedureTColorComboBox.CreateWnd;
//顏色構件的Items屬性 初始化
begin
inheritedCreateWnd;
Items.Clear;
Items.Add(黑色);
Items.Add(藍色);
Items.Add(藍綠);
Items.Add(鮮綠);
Items.Add(粉紅);
Items.Add(紅色);
Items.Add(黃色);
Items.Add(白色);
Items.Add(深藍);
Items.Add(青色);
Items.Add(綠色);
Items.Add(紫色);
Items.Add(深紅);
Items.Add(深黃);
Items.Add(深灰);
Items.Add(銀色);
//若不需要這么 多顏色可在構件的items屬性中刪 除不需要的顏色
end;
//重載DrawItem 過程
procedureTColorComboBox.DrawItem(Index: Integer;Rect:TRect;State:TOwnerDrawState);
var
TempColor:TColor; //自畫顏色
TempBrushColor:TColor; //臨時顏色
begin
//本 構件的默認自畫設置
TempBrushColor:=Canvas.Brush.Color;
//保存原來的的顏色
Canvas.FillRect(Rect);

ifItems[index]=黑色 then
TempColor:=clBlack
elseifItems[index]=藍色 then
TempColor:=clBlue
elseifItems[index]=藍綠 then
TempColor:=clAqua
elseifItems[index]=鮮綠 then
TempColor:=clLime

elseifItems[index]=粉紅 then
TempColor:=clFuchsia
elseifItems[index]=紅色 then
TempColor:=clRed
elseifItems[index]=黃色 then
TempColor:=clYellow
elseifItems[index]=白色 then
TempColor:=clWhite
elseifItems[index]=深藍 then
TempColor:=clNavy
elseifItems[index]=青色 then
TempColor:=clTeal
elseifItems[index]=綠色 then
TempColor:=clGreen
elseifItems[index]=紫色 then
TempColor:=clPurple
elseifItems[index]=深紅 then
TempColor:=clMaroon
elseifItems[index]=深黃 then
TempColor:=clOlive
elseifItems[index]=深灰 then
TempColor:=clGray
elseifItems[index]=銀色 then
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]);
end;
end.   此控件可以在所有需要顏色選項的程序中使用而且非常方便和美觀,并且使編程節省很多時間,增加了程序可靠性和可讀性。 三、 自定義顏色對話框構件的使用
  當注冊完自定義顏色構件后,可以從Delphi構件模板的Sample頁中選擇自定義顏色構件,和使用Delphi本身構件沒有區別。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美另类极品videosbest最新版本| 亚洲性无码av在线| 欧美精品激情blacked18| 伊人伊成久久人综合网小说| 精品偷拍各种wc美女嘘嘘| 国产一区二区免费| 亚洲影院色无极综合| 欧美一区二区三区免费视| 久久亚洲精品成人| 国产欧美精品在线播放| 国产91精品久| 精品久久久久久久久久久| 最近中文字幕2019免费| 日韩av一区二区在线| 亚洲第一色中文字幕| 国产视频丨精品|在线观看| 色婷婷综合成人| 欧美日韩在线观看视频| 国产欧美一区二区三区久久| 欧美成aaa人片免费看| 日韩免费av在线| 成人性生交大片免费看视频直播| 97在线视频一区| 在线精品国产成人综合| 色婷婷久久一区二区| 欧美性受xxx| 亚洲一区制服诱惑| 日韩一区二区久久久| 日韩精品欧美国产精品忘忧草| 国产ts人妖一区二区三区| 久久免费视频这里只有精品| 欧美日韩亚洲一区二区| 欧美成人免费在线观看| 欧美xxxx综合视频| 91免费看视频.| 中文字幕av一区二区三区谷原希美| 69久久夜色精品国产7777| 亚洲色图国产精品| 高清欧美电影在线| 日韩专区在线播放| 欧美大学生性色视频| 亚洲欧美成人一区二区在线电影| 国产专区欧美专区| 亚洲午夜精品久久久久久久久久久久| 91天堂在线视频| 日韩欧美精品免费在线| 欧美三级欧美成人高清www| 久久久亚洲网站| 国产精品444| 精品综合久久久久久97| 日韩三级影视基地| 中文字幕欧美精品在线| 国产v综合ⅴ日韩v欧美大片| 国产精品久久久久aaaa九色| 在线观看国产成人av片| 自拍偷拍亚洲精品| 疯狂蹂躏欧美一区二区精品| 91社影院在线观看| 国产99久久精品一区二区| 91在线中文字幕| 日韩av123| 国产午夜精品美女视频明星a级| 中文字幕欧美专区| 78m国产成人精品视频| 欧美激情精品久久久久久蜜臀| 国产免费成人av| 九九九热精品免费视频观看网站| 国产精品第一第二| 欧美日韩成人黄色| 91精品国产自产在线观看永久| 国产精品中文字幕在线| 国内精品美女av在线播放| 91欧美日韩一区| 午夜精品一区二区三区在线| 久久精品在线视频| 国色天香2019中文字幕在线观看| 欧美日韩一区二区在线| 91免费人成网站在线观看18| 欧美精品videosex极品1| 日韩中文字幕视频在线观看| 久久精品中文字幕免费mv| 日韩美女视频中文字幕| 亚洲人成电影网站色xx| 国产亚洲欧洲高清一区| 色偷偷亚洲男人天堂| 91精品视频免费观看| 日韩视频一区在线| 亚洲色图15p| 欧美成人精品不卡视频在线观看| 日韩国产高清视频在线| 欧美日韩福利电影| 538国产精品视频一区二区| 久久综合国产精品台湾中文娱乐网| 欧美精品中文字幕一区| 精品无人区太爽高潮在线播放| 欧美午夜片在线免费观看| 亚洲成人免费在线视频| 国产成人亚洲综合青青| 国产91久久婷婷一区二区| 成人免费视频网址| 国产精品激情av在线播放| 日韩av成人在线| 在线观看亚洲区| 在线日韩欧美视频| 久久久精品免费| 欧美一区二区三区……| 国产亚洲欧美日韩一区二区| 亚洲国产欧美一区| 日本亚洲欧洲色α| 国产精品亚洲аv天堂网| 亚洲美女激情视频| 91系列在线播放| 奇米4444一区二区三区| 日韩精品在线免费观看视频| 日韩欧美成人精品| 欧美韩日一区二区| 在线亚洲国产精品网| 伊人久久男人天堂| 久久久精品免费| 成人精品一区二区三区电影免费| 精品偷拍各种wc美女嘘嘘| 欧美激情中文字幕在线| 国产免费一区二区三区在线观看| 日韩av电影手机在线| 国产精品一区二区三区免费视频| 日本一区二区不卡| 国产精品私拍pans大尺度在线| 欧美噜噜久久久xxx| 日韩在线视频导航| 国产精品人成电影在线观看| 日韩av中文字幕在线免费观看| 欧美高清第一页| 成人黄色影片在线| 日韩免费中文字幕| 久久免费国产精品1| 亚洲成人久久一区| 日韩高清电影好看的电视剧电影| 亚洲无亚洲人成网站77777| 日韩美女视频中文字幕| 国产亚洲欧美日韩美女| 色无极亚洲影院| 久久精品久久精品亚洲人| 日产精品久久久一区二区福利| 91免费欧美精品| 日本韩国欧美精品大片卡二| 亚洲欧美国内爽妇网| 97精品久久久中文字幕免费| 这里只有精品丝袜| 欧美成人一二三| 国产福利精品在线| 国产精品自在线| 国产91精品视频在线观看| 国产免费久久av| 日韩在线不卡视频| www.色综合| 麻豆国产va免费精品高清在线| www.久久草.com| 在线视频日韩精品| 欧美自拍视频在线| 91色p视频在线| 亚洲香蕉伊综合在人在线视看| 国产丝袜视频一区| 亚洲精品综合久久中文字幕| 成人免费激情视频|