我必须显示下拉TComboBox
项目的提示。
为此,我可以使用该OnMouseMove
事件来处理悬停消息。它将鼠标 X,Y 客户端坐标作为参数。如果我可以确定要绘制的第一个项目(带有垂直滚动条的下拉列表),那么我可以使用该ItemHeight
值确定光标下的项目。
是否有任何 Win32 API 调用消息来获取此值?IDE 不支持此信息,或者我找不到它。
一种选择是使用 cxOwnerDrawXXXX 样式的 ComboBox 和 OnDrawItem 事件,它会告诉您何时绘制焦点项目。我自己曾经使用过这种方法来更新文本框中的静态提示,该提示提供有关焦点/悬停在项目上的更多信息。
将提示文本放入 StaticText 控件的示例:
procedure TForm1.ComboBox1CloseUp(Sender: TObject);
begin
StaticText1.Caption := '';
end;
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect:
TRect; State: TOwnerDrawState);
begin
// Update a hint on a static control
if (odSelected in State) and (Control as TComboBox).DroppedDown then
StaticText1.Caption := 'Hint for value:' + (Control as TComboBox).Items[Index];
// Draw list item
with (Control as TComboBox).Canvas do
begin
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, (Control as TComboBox).Items[Index]);
end;
end;
可以适应激活/显示/存储提示而不是更新静态控件。