在combobox所在的窗口的Formshow事件里调用即可

  1. procedure SetComboBoxListWidth( AComboBox: TComboBox );
  2. var
  3. i: Integer;
  4. nMaxLen, nMinWidth: integer;
  5. nFontWidth: Integer;
  6. nCboLeft: integer;
  7. ctlCustom: TControl;
  8. begin
  9. nCboLeft := AComboBox.Left;
  10. ctlCustom := AComboBox;
  11. with AComboBox do
  12. begin
  13. nFontWidth := Round( Abs(Font.Height / 2 ) );
  14. nMaxLen:= 0;
  15. for i:=0 to Items.Count-1 do
  16. begin
  17. if length(Items[i])* nFontWidth > nMaxLen then
  18. nMaxlen:= length(Items[i])* nFontWidth+5;
  19. end;
  20. if Items.Count > DropDownCount then
  21. nMaxLen := nMaxLen + 20;
  22. if nMaxLen > Width then
  23. begin
  24. if Items.Count>DropDownCount then
  25. begin
  26. SendMessage( Handle, CB_SETHORIZONTALEXTENT, nMaxLen+5, 0 );
  27. {解决分辨率小导致的ComboboxList的宽度超出屏幕}
  28. //while 部分是用来取出combobox控件相对与窗体的横坐标
  29. while not (ctlCustom.Parent is TForm) do
  30. begin
  31. nCboLeft := nCboLeft + ctlCustom.Parent.Left;
  32. ctlCustom := ctlCustom.Parent;
  33. end;
  34. nMinWidth := Min(400, nMaxLen);                      // 使用不大于nMaxLen的数做比较
  35. if (nCboLeft + nMinWidth) > Screen.Width-25 then     // 不超出屏幕,并保留窗口滚动条宽度,约25
  36. nMinWidth := Screen.Width-25-nCboLeft;
  37. nMinWidth := Max(nMinWidth, Width);                  // 不小于控件自身宽度
  38. PostMessage(Handle, CB_SETDROPPEDWIDTH, nMinWidth, 0);
  39. end
  40. else
  41. PostMessage(Handle, CB_SETDROPPEDWIDTH, nMaxLen , 0);
  42. ShowHint := True;
  43. end
  44. else
  45. begin
  46. SendMessage( Handle, CB_SETHORIZONTALEXTENT, 0, 0 );
  47. PostMessage(Handle, CB_SETDROPPEDWIDTH, Width , 0);
  48. end;
  49. end;
  50. end;

http://blog.csdn.net/youthon/article/details/8179348

delphi自动调整combobox下拉列表宽度(PostMessage CB_SETDROPPEDWIDTH)的更多相关文章

  1. Qt Quick 常用元素:ComboBox(下拉列表) 与 ProgressBar(进度条)

    一.ComboBox ComboBox,即下拉列表框,由一个列表框和一个标签控件(或编辑控件)组成.ComboBox 的下拉列表是使用 Menu 实现的,列表内的每个条目对应一个 Menultem. ...

  2. 发掘ListBox的潜力(一):自动调整横向滚动条宽度

    <自绘ListBox的两种效果>一文帖出之后,从反馈信息来看,大家对这种小技巧还是很认同.接下来我将继续围绕ListBox写一系列的文章,进一步发掘ListBox的潜力,其中包括:自动调整 ...

  3. ExtJS ComboBox 下拉列表详细用法

    ExtJS ComboBox 下拉列表详细用法 标签: combobox 2015-06-14 23:23 5171人阅读 评论(2) 收藏 举报  分类: ExtJS(32)    目录(?)[+] ...

  4. EasyUI combobox下拉列表实现搜索过滤(模糊匹配)

    项目中的某个下拉列表长达200多个项,这么巨大的数量一个一个找眼镜都得看花,于是就得整了个搜索功能.看网上别人帖子有只能前缀匹配的方案,但只能前缀匹配的话用起来也不是很方便.于是就记录一下模糊匹配的方 ...

  5. 如何设置 ComboBox 下拉列表的高度或间距

    ComboBox 的下拉列表部分总是很挤,看起不舒服,但是设置了 ItemHeight 没用,怎么办呢? 首先设置一个较大的 ItemHeight 值,比如 20: 然后设置 ComboBox 的 D ...

  6. delphi button 实现下拉列表

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  7. easyui combobox下拉列表的多选值

    html: <input id="cc" class="easyui-combobox" value="" data-options= ...

  8. 45. ExtJS ComboBox 下拉列表详细用法

    转自:https://blog.csdn.net/luckypeng/article/details/46496151 ComboBox 是ExtJS中经常用到的控件,今天我们来讲一下它的一些用法. ...

  9. DataGridView列的宽度、行的高度自动调整

    注意:DataGridView控件是从.NET Framework 2.0版本开始追加的. 介绍一下DataGridView列的宽度和行的高度,根据单元格或Header的内容(一般是内容全部被表示)自 ...

随机推荐

  1. php实现 坐标移动

    php实现  坐标移动 一.总结 一句话总结:伪代码,带函数逻辑,函数这样的方式写算法程序会节约超多的时间. 1.为什么算法题数据输入最好用多组数据输入的方式? 因为都是多组数据测试,而且多组数据输入 ...

  2. Android 添加常驻图标到状态栏

    / * * 如果没有从状态栏中删除ICON,且继续调用addIconToStatusbar,则不会有任何变化.如果将notification中的resId设置不同的图标,则会显示不同的图标 * / p ...

  3. AJAX 相关笔记

    AJAX (Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)). 平时工作中使用ajax的频率挺高的,这里整理了一些ajax相关的小知识,后续 ...

  4. 2015年创业中遇到的技术问题:1-10(乱码-SpringMVC-jquery-JSON等)

    1.数据库表名重构.    之前受PHP等程序的影响,数据库表名喜欢用数据库的名称作为前缀,比如"p2p_account".    在经过大量的实践之后,发现Java程序中,基本没 ...

  5. [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 ...

  6. sql中group by用来干嘛的

    sql中group by用来干嘛的 一.总结 一句话总结: 1.group by用来分类汇总的,by后面接要分的类 2.group by既然是分类汇总,那就要和聚合函数结合使用,因为要汇总啊 3.ha ...

  7. leveldb学习:skiplist

    leveldb中的memtable仅仅是一个封装类,它的底层实现是一个跳表. 跳表是一种基于随机数的平衡数据结构.其它的平衡数据结构还有红黑树.AVL树.但跳表的原理比它们简单非常多.跳表有点像链表, ...

  8. 详细阐述Web开发中的图片上传问题

    Web开发中,图片上传是一种极其常见的功能.但是呢,每次做上传,都花费了不少时间. 一个"小功能"花费我这么多时间,真心不愉快. So,要得认真分析下原因. 1.在最初学习Java ...

  9. 链表与哈希表基本概念及Java常用集合

    -链表- 是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个 ...

  10. python于lxml应用

    首先下载lxml, http://www.lfd.uci.edu/~gohlke/pythonlibs/ ,然后加入引用 from lxml import _elementpath as DONTUS ...