用Delphi 实现自定义颜色对话框及其构件-Delphi-优质IT资源分享社区

yutingzhinan
论坛版主
论坛版主
  • UID9
  • 粉丝1
  • 关注0
  • 发帖数36
阅读:232回复:0

用Delphi 实现自定义颜色对话框及其构件

楼主#
更多 发布于:2016-06-17 23:31



在开发证券剖析软件中,常常要制作各种股市的剖析曲线。为了使得软件的
功用愈加便利.灵敏,用户期望能够按照自个的喜爱自界说各种曲线的色彩。在WORD97的[格式]菜单下的字体对话框中有类似的功用。当用户单击字体对话框中的色彩下拉框时,各种色彩的简单图画和字体的色彩称号一同显现出来,这么处理的成果明显比只提供一个装有色彩称号的下拉框作用要好的多。

一、自界说色彩对话框的完成
在Delphi中,咱们能够运用TComboBox 完成类似的功用。在TcomboBox构 件中有一个Style特点,
决议TcomboBox的显现特点。 一般可挑选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自身构件没有区别。    






优质IT资源分享社区为你提供此文。
本站有大量优质Delphi教程视频,资料等资源,包含Delphi基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。
Delphi教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]


微信小程序开发

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客