Delphi制作图形化的ComboBox

lansetita

lansetita

2016-01-29 14:24

Delphi制作图形化的ComboBox,Delphi制作图形化的ComboBox
  要建立一个自绘的ComboBox组件,我们先要把它的Style属性设为cs_OwnerDrawFixed或者cs_OwnerDrawVariable,如果在ComboBox组件中的所有元素都是相等高度的,例如字符或图标,那么就使用cs_OwnerDrawFixed;如果在ComboBox组件中的各个元素不是相等高度的,例如不同大小的位图,那么就使用 cs_OwnerDrawVariable属性。ComboBox组件会接收到WM_MEASUREITEM消息,从而触发OnMeasureItem事件。Windows就不再对该组件进行绘制了,取而代之的是我们用发送WM_DRAWITEM的方式对它进行重绘。

  下面我们用两个实例来说明完整的绘制过程:

  1、显示颜色的Combobox:


(图一)

  第一步,我们把颜色的名字加入ComboBox的Item属性中(这一步是在Form.OnCreate事件中完成的),所有的颜色的名称将被加入一个常量(Colors)中,代码如下:

const Colors:array[0..17] of TColor=
(clAqua, clBlack, ..., clWhite, clYellow) ;//一部分颜色的名称被省略了
  第二步,绘制各元素,它的代码并不复杂,我们可以把颜色名称与各元素关联起来,用这种颜色在Combobox中绘制矩形并着色,代码如下:

procedure TForm1.ColorComboDrawItem (Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
 with Control as TComboBox do
 begin //填充矩形
   Canvas.Brush.Color := TColor(Colors[Index]);
   Canvas.FillRect(Rect);
   Canvas.TextOut(Rect.Left,Rect.Top,ColorToString(Colors[Index]))
 end;
end;
  2、所见即所得的字体Combobox:


(图二)

  虽然这个看起来很复杂,甚至有人可能会认为要用一张张字体的图片才能实现,实际上并非如此。大家一定还记得在Delphi中有一个TScreen类,这次就要用到它了。

  第一步,系统字体并不像颜色名称那样少,如果还是用上面对付颜色的方法来对付字体,也许得干上整整一天,特别是那些美术字体的爱好者们,我们用下面的程序来填充:

for i := 0 to Screen.Fonts.Count-1 do
FontCombo.Items.Add(Screen.Fonts.Strings[i]);
  第二步,绘制字体:

procedure TForm1.FontComboDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
 with (Control as TComboBox).Canvas do
 begin
  Font.Name := Screen.Fonts.Strings[Index];
  FillRect(Rect);
  TextOut(Rect.Left,Rect.Top,PChar(Screen.Fonts.Strings[Index]))
 end;
end;
  上面的“自绘”方法并不仅仅可以用在ComboBox上,也可用在其它的Windows公共组件上,比如ListView、TreeView、TabControl、StatusBar等等,只要你发挥想像力,在编程的领域没有什么是绝对的禁区,再加上Delphi这柄倚天剑,真的会有这样的感叹,“没有它做不到,只有你想不到”!

展开更多 50%)
分享

猜你喜欢

Delphi制作图形化的ComboBox

Delphi
Delphi制作图形化的ComboBox

用Flash图形化数据(二)

PHP
用Flash图形化数据(二)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Samba的图形化配置工具-SWAT

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Samba的图形化配置工具-SWAT

用Flash图形化数据(一)

PHP
用Flash图形化数据(一)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

通向MySQL神秘王国的图形化之路

编程语言 网络编程
通向MySQL神秘王国的图形化之路

字体图形化在设计中的应用

平面设计 海报设计 广告设计 画报设计 签名设计 服装设计 名片设计 画册设计 版式设计 商标设计
字体图形化在设计中的应用

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

有趣 用Flash制作互动的小人

有趣 用Flash制作互动的小人

简单的用PHP编写的导航条程序

简单的用PHP编写的导航条程序
下拉加载更多内容 ↓