delphi自动调整combobox下拉列表宽度(PostMessage CB_SETDROPPEDWIDTH)
在combobox所在的窗口的Formshow事件里调用即可
- procedure SetComboBoxListWidth( AComboBox: TComboBox );
- var
- i: Integer;
- nMaxLen, nMinWidth: integer;
- nFontWidth: Integer;
- nCboLeft: integer;
- ctlCustom: TControl;
- begin
- nCboLeft := AComboBox.Left;
- ctlCustom := AComboBox;
- with AComboBox do
- begin
- nFontWidth := Round( Abs(Font.Height / 2 ) );
- nMaxLen:= 0;
- for i:=0 to Items.Count-1 do
- begin
- if length(Items[i])* nFontWidth > nMaxLen then
- nMaxlen:= length(Items[i])* nFontWidth+5;
- end;
- if Items.Count > DropDownCount then
- nMaxLen := nMaxLen + 20;
- if nMaxLen > Width then
- begin
- if Items.Count>DropDownCount then
- begin
- SendMessage( Handle, CB_SETHORIZONTALEXTENT, nMaxLen+5, 0 );
- {解决分辨率小导致的ComboboxList的宽度超出屏幕}
- //while 部分是用来取出combobox控件相对与窗体的横坐标
- while not (ctlCustom.Parent is TForm) do
- begin
- nCboLeft := nCboLeft + ctlCustom.Parent.Left;
- ctlCustom := ctlCustom.Parent;
- end;
- nMinWidth := Min(400, nMaxLen); // 使用不大于nMaxLen的数做比较
- if (nCboLeft + nMinWidth) > Screen.Width-25 then // 不超出屏幕,并保留窗口滚动条宽度,约25
- nMinWidth := Screen.Width-25-nCboLeft;
- nMinWidth := Max(nMinWidth, Width); // 不小于控件自身宽度
- PostMessage(Handle, CB_SETDROPPEDWIDTH, nMinWidth, 0);
- end
- else
- PostMessage(Handle, CB_SETDROPPEDWIDTH, nMaxLen , 0);
- ShowHint := True;
- end
- else
- begin
- SendMessage( Handle, CB_SETHORIZONTALEXTENT, 0, 0 );
- PostMessage(Handle, CB_SETDROPPEDWIDTH, Width , 0);
- end;
- end;
- end;
http://blog.csdn.net/youthon/article/details/8179348
delphi自动调整combobox下拉列表宽度(PostMessage CB_SETDROPPEDWIDTH)的更多相关文章
- Qt Quick 常用元素:ComboBox(下拉列表) 与 ProgressBar(进度条)
一.ComboBox ComboBox,即下拉列表框,由一个列表框和一个标签控件(或编辑控件)组成.ComboBox 的下拉列表是使用 Menu 实现的,列表内的每个条目对应一个 Menultem. ...
- 发掘ListBox的潜力(一):自动调整横向滚动条宽度
<自绘ListBox的两种效果>一文帖出之后,从反馈信息来看,大家对这种小技巧还是很认同.接下来我将继续围绕ListBox写一系列的文章,进一步发掘ListBox的潜力,其中包括:自动调整 ...
- ExtJS ComboBox 下拉列表详细用法
ExtJS ComboBox 下拉列表详细用法 标签: combobox 2015-06-14 23:23 5171人阅读 评论(2) 收藏 举报 分类: ExtJS(32) 目录(?)[+] ...
- EasyUI combobox下拉列表实现搜索过滤(模糊匹配)
项目中的某个下拉列表长达200多个项,这么巨大的数量一个一个找眼镜都得看花,于是就得整了个搜索功能.看网上别人帖子有只能前缀匹配的方案,但只能前缀匹配的话用起来也不是很方便.于是就记录一下模糊匹配的方 ...
- 如何设置 ComboBox 下拉列表的高度或间距
ComboBox 的下拉列表部分总是很挤,看起不舒服,但是设置了 ItemHeight 没用,怎么办呢? 首先设置一个较大的 ItemHeight 值,比如 20: 然后设置 ComboBox 的 D ...
- delphi button 实现下拉列表
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- easyui combobox下拉列表的多选值
html: <input id="cc" class="easyui-combobox" value="" data-options= ...
- 45. ExtJS ComboBox 下拉列表详细用法
转自:https://blog.csdn.net/luckypeng/article/details/46496151 ComboBox 是ExtJS中经常用到的控件,今天我们来讲一下它的一些用法. ...
- DataGridView列的宽度、行的高度自动调整
注意:DataGridView控件是从.NET Framework 2.0版本开始追加的. 介绍一下DataGridView列的宽度和行的高度,根据单元格或Header的内容(一般是内容全部被表示)自 ...
随机推荐
- php实现 坐标移动
php实现 坐标移动 一.总结 一句话总结:伪代码,带函数逻辑,函数这样的方式写算法程序会节约超多的时间. 1.为什么算法题数据输入最好用多组数据输入的方式? 因为都是多组数据测试,而且多组数据输入 ...
- Android 添加常驻图标到状态栏
/ * * 如果没有从状态栏中删除ICON,且继续调用addIconToStatusbar,则不会有任何变化.如果将notification中的resId设置不同的图标,则会显示不同的图标 * / p ...
- AJAX 相关笔记
AJAX (Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)). 平时工作中使用ajax的频率挺高的,这里整理了一些ajax相关的小知识,后续 ...
- 2015年创业中遇到的技术问题:1-10(乱码-SpringMVC-jquery-JSON等)
1.数据库表名重构. 之前受PHP等程序的影响,数据库表名喜欢用数据库的名称作为前缀,比如"p2p_account". 在经过大量的实践之后,发现Java程序中,基本没 ...
- [Ramda] Change Object Properties with Ramda Lenses
In this lesson we'll learn the basics of using lenses in Ramda and see how they enable you to focus ...
- sql中group by用来干嘛的
sql中group by用来干嘛的 一.总结 一句话总结: 1.group by用来分类汇总的,by后面接要分的类 2.group by既然是分类汇总,那就要和聚合函数结合使用,因为要汇总啊 3.ha ...
- leveldb学习:skiplist
leveldb中的memtable仅仅是一个封装类,它的底层实现是一个跳表. 跳表是一种基于随机数的平衡数据结构.其它的平衡数据结构还有红黑树.AVL树.但跳表的原理比它们简单非常多.跳表有点像链表, ...
- 详细阐述Web开发中的图片上传问题
Web开发中,图片上传是一种极其常见的功能.但是呢,每次做上传,都花费了不少时间. 一个"小功能"花费我这么多时间,真心不愉快. So,要得认真分析下原因. 1.在最初学习Java ...
- 链表与哈希表基本概念及Java常用集合
-链表- 是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个 ...
- python于lxml应用
首先下载lxml, http://www.lfd.uci.edu/~gohlke/pythonlibs/ ,然后加入引用 from lxml import _elementpath as DONTUS ...