麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

用Delphi 實現(xiàn)自定義顏色對話框及其構(gòu)件

2019-11-17 05:06:59
字體:
供稿:網(wǎng)友
p>  在開發(fā)證券分析軟件中,經(jīng)常要繪制各種股票的分析曲線。為了使得軟件的 功能更加方便.靈活,用戶希望能夠按照自己的喜好自定義各種曲線的顏色。在WORD97的[格式]菜單下的字體對話框中有類似的功能。當(dāng)用戶單擊字體對話框中的顏色下拉框時,各種顏色的簡單圖案和字體的顏色名稱一起顯示出來,這樣處理的結(jié)果顯然比只提供一個裝有顏色名稱的下拉框效果要好的多。 一、自定義顏色對話框的實現(xiàn)
  在Delphi中,我們可以使用TComboBox 實現(xiàn)類似的功能。在TcomboBox構(gòu) 件中有一個Style屬性, 決定TcomboBox的顯示屬性。 通常可選取csDropDown,CSSimple,csDropDownList, csOwnerDrawFixed,csOwnerDrawVariable等。其中當(dāng)選取csOwnerDrawFixed時表示創(chuàng)建一個自畫下拉框,下拉框 的每一項的高度由ItemHeight屬性 決定。并且必須在TcomboBox的OnDrawItem事件中響應(yīng)自畫過程。 OnDrawItem的定義為:
PRopertyOnDrawItem:TDrawItemEvent;
TDrawItemEvent =procedure(Control:TWinControl;Index:IntegerRect:TRect; State:TOwnerDrawState)ofobject;
其中的三個參數(shù)的含義為:
Control:  包含下拉框的TComboBox
Index:自畫的下拉框在TComboBox 的Items屬性中的索引號
Rect:自畫的位置   因此,知道了需要自畫的矩形的位置(Rect參 數(shù))和在TComboBox中的索引號(Index參數(shù)),我們可以使用TcomboBox的Canvas屬性在其畫布上自畫。 具體的實現(xiàn)過程如下:
1.新建一個工程文件,設(shè)置其默認窗體的有關(guān)屬性為:
Caption 自定義下拉框
Name Form1
PositionpoScreenCenter
2 .在窗體中放置兩個TcomboBox構(gòu) 件,設(shè)置其屬性如下:
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//根據(jù)Index 的不同,定義不同自畫的顏色
0://黑色
TempColor:=clBlack;
1://藍色
TempColor:=clBlue;
2://藍綠
TempColor:=clAqua;
3://鮮綠
TempColor:=clLime;
4://紅色
TempColor:=clRed;
5://黃色
TempColor:=clyellow;
//可以在此加入對其它顏色的響應(yīng)
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;
//顯示與顏色對應(yīng)的字符串
Canvas.TextOut((Rect.Left+Rect.Right)div2,
Rect.Top+1,
Items[Index]);
end;
end;
5 .保存,運行文件,我們可以看到和WORD中顏色下拉框相同的 效果
有愛好的讀者,可以在文中所示的位置加入對其它顏色處理。
以上程序在Delphi3.0,4.0 上通過。 二、 自定義顏色對話框構(gòu)件的編寫

  對許多Delphi程序員來說,如何編寫自己的Delphi構(gòu)件還是比較生疏的,Delphi構(gòu)件實際上是從Tcomponent 類繼續(xù)發(fā)展而來,編寫構(gòu)件實際就是編寫非凡的類。下面我們就以自定義顏色對話框為例介紹構(gòu)件的編寫。   下面TColorComboBox是從TcomboBox 類繼續(xù)來的,當(dāng)點擊右邊的下拉箭頭時彈出和下拉items對應(yīng)的各種顏色自畫框。   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 來創(chuàng)建編輯文件ColorComBox.dcr, 為TColorComboBox類建立位圖。
  4. 在Create中加入對字體大小高度的規(guī)定及對控件的Style 屬性(設(shè)成csOwnerDrawFixed) 的規(guī)定,在Create后執(zhí)行的CreateWnd中初始化顏色的items,如 果不需要那么多顏色項,可以以后在生成控件的items 屬性中直接刪除不需要的顏色。
  5. 在DrawItem事件中加入顏色自畫程序,此事件在On DrawItem之前發(fā)生。
實現(xiàn)程序如下:
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;//注冊構(gòu)件
begin
RegisterComponents(Samples,[TColorComboBox]);
end;

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

procedureTColorComboBox.CreateWnd;
//顏色構(gòu)件的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(銀色);
//若不需要這么 多顏色可在構(gòu)件的items屬性中刪 除不需要的顏色
end;
//重載DrawItem 過程
procedureTColorComboBox.DrawItem(Index: Integer;Rect:TRect;State:TOwnerDrawState);
var
TempColor:TColor; //自畫顏色
TempBrushColor:TColor; //臨時顏色
begin
//本 構(gòu)件的默認自畫設(shè)置
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;
//顯示與顏色對應(yīng)的字符串
Canvas.TextOut((Rect.Left+Rect.Right)div2,
Rect.Top+1,
Items[Index]);
end;
end.   此控件可以在所有需要顏色選項的程序中使用而且非常方便和美觀,并且使編程節(jié)省很多時間,增加了程序可靠性和可讀性。 三、 自定義顏色對話框構(gòu)件的使用
  當(dāng)注冊完自定義顏色構(gòu)件后,可以從Delphi構(gòu)件模板的Sample頁中選擇自定義顏色構(gòu)件,和使用Delphi本身構(gòu)件沒有區(qū)別。

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

圖片精選

主站蜘蛛池模板: 欧美日韩亚洲另类 | 国产精品久久久久久久久久久久久久久久 | 国产一区视频在线免费观看 | 久久性生活免费视频 | 成人男女啪啪免费观看网站四虎 | 91短视频在线视频 | 鲁丝片一区二区三区免费入口 | 美女毛片在线观看 | 亚洲国产精品一区二区久久 | 欧美日韩视频网站 | 黄色伊人网站 | 日本一道aⅴ不卡免费播放 久久久久久久高清 | 国产欧美在线观看不卡一 | av电影直播| 高清做爰免费无遮网站挡 | 国产在线一级视频 | 成人免费看片a | 成人午夜一区 | 欧美性受ⅹ╳╳╳黑人a性爽 | 99精彩视频在线观看 | 最近中文字幕一区二区 | 99亚洲伊人久久精品影院红桃 | 午夜影院在线免费观看 | 成人免费观看毛片 | 欧美成人性色 | 91社| 免费国产自久久久久三四区久久 | 在线播放视频一区二区 | v天堂在线视频 | 91综合在线观看 | 舌头伸进添的我好爽高潮网站 | 大胆在线日本aⅴ免费视频 美国黄色毛片女人性生活片 | 国产91一区 | 成人综合区一区 | 成人福利电影在线观看 | 手机黄色小视频 | 久久亚洲精品视频 | 国产第一页精品 | 日本精品黄色 | aa国产视频一区二区 | 中文字幕亚洲欧美 |