用Delphi实现自定义颜色对话框及其构件
2008-04-09 04:17:07来源:互联网 阅读 ()
一、 自 定 义 颜 色 对 话 框 的 实 现
在Delphi 中, 我 们 可 以 使 用TComboBox 实 现 类 似 的 功 能。 在TcomboBox 构 件 中 有 一 个Style 属 性, 决 定TcomboBox 的 显 示 属 性。 通 常 可 选 取csDropDown, csSimple, csDropDownList, csOwnerDrawFixed, csOwnerDrawVariable 等。 其 中 当 选 取csOwnerDrawFixed 时 表 示 创 建 一 个 自 画 下 拉 框, 下 拉 框 的 每 一 项 的 高 度 由ItemHeight 属 性 决 定。 并 且 必 须 在TcomboBox 的OnDrawItem 事 件 中 响 应 自 画 过 程。 OnDrawItem 的 定 义 为:
property OnDrawItem: TDrawItemEvent;
TDrawItemEvent = procedure
(Control: TWinControl; Index: Integer Rect:
TRect; State: TOwnerDrawState) of object;
其 中 的 三 个 参 数 的 含 义 为:
Control: 包 含 下 拉 框 的TComboBox
Index: 自 画 的 下 拉 框 在
TComboBox 的Items 属 性 中 的 索 引 号
Rect: 自 画 的 位 置
因 此, 知 道 了 需 要 自 画 的 矩 形 的 位 置(Rect 参 数) 和 在TComboBox 中 的 索 引 号 (Index 参 数), 我 们 可 以 使 用TcomboBox 的Canvas 属 性 在 其 画 布 上 自 画。
具 体 的 实 现 过 程 如 下:
1 . 新 建 一 个 工 程 文 件, 设 置 其 默 认 窗 体 的 有 关 属 性 为:
Caption 自 定 义 下 拉 框
Name Form1
Position poScreenCenter
2 . 在 窗 体 中 放 置 两 个TcomboBox 构 件, 设 置 其 属 性 如 下:
Name Style ItemHeight OnDrawItem
ColorCombo1 csOwnerDrawFixed 20 ColorComboDrawItem
ColorCombo2 csOwnerDrawFixed 30 ColorComboDrawItem
3 . 双 击ColorCombo1 和ColorCombo2 的Items 属 性 旁 的 圆 点 按 纽, 在"String List Editor" 对 话 框 中 输 入 黑 色、蓝 色、蓝 绿、鲜 绿、红 色、黄 色 等 各 种 颜 色 的 名 称
4 . 在ColorCombo1 的OnDrawItem 事 件 中 加 入 如 下 代 码
procedure TForm1.ColorComboDrawItem
(Control: TWinControl; Index: Integer;
Rect: TRect; State: OwnerDrawState);
var
TempColor :TColor; // 自 画 颜 色
TempBrushColor :TColor; // 临 时 颜 色
begin
with (Control as TComboBox) do
// 在Combo 的Canvas 上 自 画
begin
TempBrushColor:=Canvas.Brush.Color;
// 保 存 原 来 的 的 颜 色
Canvas.FillRect(Rect);
case Index of // 根 据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) div 3,
Rect.Bottom-1);
Canvas.Brush.Color:=TempBrushColor;
// 显 示 与 颜 色 对 应 的 字 符 串
Canvas.TextOut((Rect.Left Rect.Right) div 2,
Rect.Top 1,
Items[Index]);
end;
end;
5 . 保 存, 运 行 文 件, 我 们 可 以 看 到 和 W O R D 中 颜 色 下 拉 框 相 同 的 效 果 有 兴 趣 的 读 者, 可 以 在 文 中 所 示 的 位 置 加 入 对 其 它 颜 色 处 理。
以 上 程 序 在Delphi 3.0,4.0 上 通 过。
二、 自 定 义 颜 色 对 话 框 构 件 的 编 写
对 许 多Delphi 程 序 员 来 说, 如 何 编 写 自 己 的Delphi 构 件 还 是 比 较 陌 生 的, Delphi 构 件 实 际 上 是 从Tcomponent 类 继 承 发 展 而 来, 编 写 构 件 实 际 就 是 编 写 特 殊 的 类。 下 面 我 们 就 以 自 定 义 颜 色 对 话 框 为 例 介 绍 构 件 的 编 写。
下 面TColorComboBox 是 从TcomboBox 类 继 承 来 的, 当 点 击 右 边 的 下 拉 箭 头 时 弹 出 和 下 拉items 对 应 的 各 种 颜 色 自 画 框。
1. 选 中Component 菜 单 项 中 的New Component 选 项。 在Ancestor Type 框 中 选TcomboBox, 在Class Name 框 中 填 入TColorComboBox, 在Palette Page 框 中 选Samples, 在Unit File Name 框 中 填 入 ColorComboBox.pas, 然 后 点 击OK 按 钮。
2. 选 中Component 菜 单 项 中 的Install Component 选 项, 点 击Into new package, 在package name 框 中 写 入 路 径 和ColorComboDpk.dpk, 点 击ok, 生 成ColorComboDpk.bpl 文 件。
3. 使 用Tools 菜 单 中 的Image Editor 来 创 建 编 辑 文 件ColorComBox.dcr, 为TColorComboBox 类 建 立 位 图。
4. 在Create 中 加 入 对 字 体 大 小 高 度 的 规 定 及 对 控 件 的Style 属 性( 设 成 csOwnerDrawFixed) 的 规 定, 在Create 后 执 行 的CreateWnd 中 初 始 化 颜 色 的items, 如 果 不 需 要 那 么 多 颜 色 项, 可 以 以 后 在 生 成 控 件 的items 属 性 中 直 接 删 除 不 需 要 的 颜 色。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:攻破“金山词霸”的技术堡垒!
下一篇:自定义快速报表的打印预览窗口
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash