- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Delphi 中,所有 TEdit 和 TComboBox 控件默认高度都是 21 像素。对于 TComboBox,这个大小是绝对的,尝试将其拉伸(stretch)到更大是行不通的。但就 TComboBoxEx 而言,默认高度为 22 像素,这使得它在您使用它的任何表单上都显得有点突出。现在根据Microsoft docs , ComboBoxEx 本质上是一个具有所有者绘制功能的 ComboBox,可处理以允许图像和缩进。
那么我的 TComboBoxEx 控件是否可以设置为 21 像素高?这取决于什么?
更新:我添加了 Quality Central report正如罗迪所建议的那样,关于这个问题。另外,我找到了修复方法。显然,大小取决于组合框中项目 -1 的大小。因此,您将该大小设置为 15(或比默认大小小 1 个像素),并且该框缩小为更熟悉的 21 像素。
最佳答案
我找到了修复方法。 Delphi 似乎有一些与此相关的错误:
更新:
正如 mghie 所指出的,我最初的想法是在调用消息时使用硬编码值 15,但在不同的 DPI 设置下效果不佳。所以我现在使用调用 GetTextMetrics 来确定高度。添加到字体高度的是 GetSystemMetrics(SM_CYBORDER) 的值。
这是基于 VCL 确定 TEdit 大小的方式。我认为这不太正确,但由于目标是使 ComboBoxEx 与 TEdit 具有相同的大小,因此它可能是我们所能得到的最接近的。它适用于 96、120、144 和 192 的 DPI 设置。
ComboBoxEx 的高度由项目 -1 的高度确定。因此,项目 0 到 count-1 是实际的列表项目,但项目 -1 是编辑器使用的高度。如果将该高度设置为 15,则控件的高度将更正为 21 像素(有关缩放问题,请参阅上面的更新)。我认为梅森可能是对的,字体大小在这里发挥了作用(可能调整项目的大小),但您可以通过调整项目大小使其正常工作。
它似乎确实引入了一个新的(在我看来,较小的)问题,即在 96 DPI 下,16 像素高的图像在编辑器部分中显示时会丢失最底线,但这几乎不会被注意到。
因此解决方法是调用以下代码:
GetTextMetrics(Canvas.Handle, TM);
SendMessage(Handle, CB_SETITEMHEIGHT, -1,
GetSystemMetrics(SM_CYBORDER) * 2 + TM.tmHeight);
关于delphi - 我可以让 TComboBoxEx 与 TComboBox 具有相同的高度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1311959/
在 Delphi 中,所有 TEdit 和 TComboBox 控件默认高度都是 21 像素。对于 TComboBox,这个大小是绝对的,尝试将其拉伸(stretch)到更大是行不通的。但就 TCom
我正在使用Delphi XE3。当使用自 Delphi XE2 以来可用的自定义样式(例如 Carbon)时,将鼠标移到 TComboBoxEx 控件的边框上(MouseExit/Enter)时,会出
嗨。 当 BiDiMode= bdRightToLeft 和 Style= csDropDownList 且应用程序使用 VCL 样式时,TComboBoxEx 项目无法正确绘制;在下拉列表中,左侧绘
我是一名优秀的程序员,十分优秀!