Delphi制作图形化的ComboBox

传奇天下万能通用登陆器(音乐拍卖)教程 制作一个。 阅读详情
从Delphi5开始,Delphi集成开发环境中的Object Inspector就使用了图形化的风格来显示某些属性。比如Cursors、Colors、Fonts和Image List等等属性就是这种类型。第一次看到这样的效果,的确令人感到神奇,各种字体的名称可以直接以这种字体的样式显示出来,在选择字体的时候真是很方便。这种效果是如何实现的呢,其实就是使用了组件的“自绘”(Ower-drawing)方法。在Delphi中想要实现这样的功能是很方便的,现在我们就开始一段神奇的“图形化组件”之旅吧,Let's Draw!

  要建立一个自绘的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这柄倚天剑,真的会有这样的感叹,“没有它做不到,只有你想不到”!
Delphi中MonthCalendar组件应用实例详解与实战 Delphi中的组件不仅提供了基础的日期选择能力,更通过一系列高级属性和方法支持开发者实现复杂、灵活且高度可定制的用户交互逻辑。在现代桌面应用开发中,仅仅满足“选一个日期”已远远不够;企业级系统往往要求批量处理多日数据、高亮关键业务节点、个性化视觉呈现以及动态响应外部状态变化等能力。本章将深入探讨如何利用SelDates数组、MarkDates标记机制及外观属性定制技术,构建具备专业水准的日历交互体验。 阅读详情

相关推荐

7、Delphi编程基础与高级特性解析

本文深入解析Delphi编程的基础操作与高级语言特性。内容涵盖DBGrid的排序与聚合功能、使用TFDBatchMove实现ETL数据处理、通过TFDLocalSQL进行多源数据集成;在高级特性方面,介绍了匿名方法与高阶函数的应用、枚举类型构建状态机、RTTI在类配置、鸭子类型和对象验证中的实践,以及类助手对现有类型的扩展方法,全面展示Delphi在现代应用开发中的强大能力。

palm99的专栏 45

DELPHI FMX模式下修改ComboBox字体

【代码】DELPHI FMX模下修改ComboBox字体。

537

TMS VCL UI Pack v13.4.0.1 在Delphi 12中的安装、配置与核心控件实战

在Windows桌面应用开发领域,第三方UI控件库是提升开发效率和界面美观度的关键工具。其核心原理在于通过封装可复用的可视化组件,为开发者提供超越原生控件的丰富功能和现代视觉风格。这类库的技术价值在于能大幅缩短开发周期,降低从零构建复杂界面的成本,并确保应用程序拥有专业、统一的视觉效果。其典型应用场景广泛覆盖企业信息管理系统、数据监控仪表盘及各类工具软件。本文聚焦于VCL生态中久负盛名的TMS VCL UI Pack,以其最新的v13.4.0.1版本为例,详细解析在最新Delphi 12 Athens环境下

weixin_30527323的博客 388

QT ComboBox控件左侧添加图标

1.输入框左侧添加图标 QAction *action = new QAction(this); action>setIcon(QIcon(":/qss/login/mimasuo.png")); ui>lineEdit_LG_Password>addAction(action,QLineEdit::LeadingPosition); 效果: 2.下拉框左侧添加图标 思路:下拉框也是由输入框组成,获得输入框的权柄,用输入框的方式添加图标 代码: QAction *action1 =

weixin_49569127的博客 3276

自绘制滚动条(ownerdraw scrollbar)

修改了别人的代码,修改后的CSkinScrollBar可以单独使用(independent,more reusabe),发表在www.codeproject.com<br>flyhigh 的作品,可以上去用关键字:scrollbar进行搜索就可以看到这样一篇文章:Replace windows's internal scrollbar<br>with customdraw scrollbar control.

在combobox控件中添加图标

首先在窗体中添加一个comboBox1和一个imageList(本例中带有三个图片) this.comboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;

cxImageCombobox使用

<br />delphi中DevExpress组件中的cxImageCombobox功能很强大,近几天同事测试,问题都出在它,于是研究了一番。<br /> <br />新建一个应用程序,拖2个cxImageComboBox在窗体上,然后加一个button。<br />设置属性如下<br /> name                                 value<br />cxImageComboBox1    editValue=0  type=Shortint<br />         

fly的专栏 3197

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

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

CxGrid.Properties.ImageCombobox设置

cxgrid中添加字段,给字段images对应image,设置properties设置imageComboBox--Items设置对应image,string value 添加数据行时指定对应的Value,可显示对应的image图标 设置ShowDescriptions=False行图标可居中显示。

shandiantianying的专栏 1981

delphi自定义控件_treeview控件加强

delphi自定义控件_treeview控件加强 Tmytreeview 对treeview控件加强 实现增删改及拖拽操作

三边定位的最小二乘法运用

已知:条件基站到移动台的距离D,基站的坐标(xi,yi,zi) 求:移动台的坐标(x,y,z) 运用最小二乘法的核心是找到最小二乘法的矩阵形式即 Ax=B 在本次实验中通过三边定位计算得到 A=[A;2*(xi-x1),2*(yi-y1),2*(zi-z1]; %系数矩阵A b=[b;D1^2-Di^2+xi^2+yi^2+zi^2-x1^2-y1^2-z1^2]; %增广矩阵b

qq_26250141的博客 1万+

Delphi 7的ListView自画CheckBox

Delphi 7下的ListView其中有个ViewStyle风格是vsReport,我们大多也是使用这个风格。在此风格下可以设置首列前面有个CheckBox复选框,但是我们更多时候,需要的是在最后一列显示CheckBox复选框。

无幻 1万+

第1章:Zephyr 开发环境搭建与 Hello World

📝【摘要】本文是Zephyr RTOS开发入门指南的第一章,详细介绍了从环境搭建到首个应用运行的完整流程。主要内容包括:1️⃣ Zephyr项目结构解析与west工具链部署;2️⃣ 开发环境配置(Linux/WSL)及SDK安装;3️⃣ 两种实践路径——官方HelloWorld样例与自定义应用开发;4️⃣ 实际硬件部署方法(nRF/STM32)及常用west命令速查;5️⃣ 典型问题解决方案。通过qemu_x86模拟器演示了基础打印功能实现,为后续深度开发奠定基础。

hemoparrot的专栏 1361

Delphi关机程序界面设计与实现

该博文展示了一个使用Delphi开发的关机程序界面设计,包含倒计时关机和定时关机功能。程序通过可视化组件如按钮、单选框和时间选择器构建用户交互界面,并利用事件处理机制实现关机逻辑。代码体现了Delphi VCL框架在桌面应用开发中的典型应用。

weixin_42576410的博客 628

LFM调制信号分类与检测识别

支持识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、阻塞干扰(BJ)、密集假目标干扰(DFJ)、密集假目标加灵巧噪声干扰(DFWSNJ)、距离欺骗干扰(DDJ)、距离欺骗加灵巧噪声干扰(DDWSNJ)。Faster-RCNN支持检测识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、密集假目标干扰(DFJ)、密集假目标加灵巧噪声干扰(DFWSNJ)、距离欺骗加灵巧噪声干扰(DDWSNJ)等8种信号。

菜yuan~的博客 1029

Cartographer实现双雷达建图

TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 2 --执行一次前端匹配需要的激光扫描分段数量。关于num_subdivisions_per_laser_scan。num_laser_scans =2,--订阅激光扫描话题数量。Frame改为 前雷达laser_1 后雷达laser_2。雷达的话题由scan改为,前scan_1 后scan_2。有些人说需要改成2,但我这里改成2反而不行,1才可以。

Studying…… 1261

SQLSERVER数据库备份/恢复

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, DB, ADODB;type  TForm1 = class(TForm)    GroupBox1: TGroupBox;    Label1:

lee576的专栏 1287

【AIGC】Qwen3-Embedding:Embedding与Rerank模型新标杆

Qwen3-Embedding:文本嵌入与重排序模型的技术解析与应用实践

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 3095

Delphi TListview自绘某列添加图片按钮并实现点击事件响应

【代码】Delphi TListview中某列添加图片按钮并实现点击事件响应。

wh445306 1795

scratch绘制旋转彩球 2023年9月电子学会图形化编程scratch编程等级考试四级真题和答案解析

​ scratch绘制旋转彩球 2023年9月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 1、准备工作 (1)删除小猫角色,从角色库选择Ball角色; (2)默认空白背景。 ​

青少年编程学习指导 1369

ESP32 WIFI 智能巡线小车设计与实现(四足 / 四轮通用)

本文设计的 ESP32 WIFI 智能巡线小车,硬件模块化、软件轻量化,兼容四足与四轮两种结构,实现了自动巡线与 WIFI 远程控制双功能。系统成本低、易上手,适合嵌入式初学者学习 WIFI 通信、传感器应用、运动控制等核心知识点,也可在此基础上扩展蓝牙控制、避障、视觉识别等功能。

weixin_42300449的博客 152

TComboBox组件的重要属性

TComboBox组件的重要属性 CharCase--------此属性用于设置编辑框内文字的大小写 DropDownCount---此属性用于设置当用户下拉组合框时不需要加滚动条就能显示的项的个数 DroppedDown-----如组合框当前被下拉,此属性返回True ItemHeight------此属性用于设置项的高度 ItemIndex-------此属性返回组合框中被选择的

kyfvc的专栏 1万+

【DexGraspNet与多指手抓取算法详解】第四章 抓取检测网络架构设计

图 $G=(V, E)$ 包含两类节点:指尖节点 $V_{tip} = \{v_{tip}^i\}_{i=1}^{N_{finger}}$ 与物体表面节点 $V_{obj} = \{v_{obj}^j\}_{j=1}^{N_{surf}}$。节点特征包含位置 $x \in \mathbb{R}^3$ 、法向 $n \in \mathbb{R}^3$ 及视觉特征 $f \in \mathbb{R}^d$。

VectorShift的博客 441

Delphi的ComBobox控件下拉内容显示不全的解决方法

procedure TForm1.rzbtbtn1Click(Sender: TObject); var _I,_MaxWidth :integer; begin cbb1.Items.Add('abcd'); cbb1.Items.Add('abcdefghijqlmxopqrst'); cbb1.Items.Add('https://blog.youkuaiyun.com/...

踏雪寻梅 3119

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 利用Delphi编程控制摄像头
下一篇: SQL Server开发的二十一条军规
libra01
博客等级 码龄26年 0粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值