【发布时间】:2018-10-08 10:55:48
【问题描述】:
我想更改下拉列表的宽度以适合项目文本。这样做时,列表可能会扩展到屏幕之外。我想要做的是在屏幕内移动下拉列表以使其再次可见。
this article 中描述了该问题。但我试过了,它不起作用。我从未收到WM_CTLCOLORLISTBOX 消息。我还尝试将MoveWindow 方法与ComboBox.ListHandle 一起使用,但列表是在其默认位置绘制的。
【问题讨论】:
-
您可以查看this 了解如何缩小下拉宽度,并根据您的目的进行调整。
-
我不想缩小它,我想改变它的位置。
-
我说过要根据您的目的对其进行调整。它展示了如何接收
WM_CTCOLORLISTBOX消息以及如何使用MoveWindow方法。你还想要什么? -
哦,对不起!我没看好。好的,但是真的有必要挂钩 WindowProc 吗?仅使用
procedure WMCtlColorListBox(var Msg: TMessage); message WM_CTLCOLORLISTBOX不起作用? -
不,这不起作用。 Peter 下面回答了long time ago:
Look at the source. TCustomCombobox.WndProc does this: WM_CTLCOLORMSGBOX..WM_CTLCOLORSTATIC: begin SetTextColor(WParam, ColorToRGB(Font.Color)); SetBkColor(WParam, ColorToRGB(Brush.Color)); Result := Brush.Handle; Exit; end; There is no call to inherited, which means the message never reaches Dispatch and so your handler is never called. There is probably a reason for that but i don't know which.
标签: delphi combobox delphi-2009