Delphi 在命令下拉组合框显示后,当鼠标移动到窗体上时,如何确保鼠标指针出现?
我的问题是:Delphi 在命令下拉组合框显示后,当鼠标移动到窗体上时,如何确保鼠标指针出现?,delphi,combobox,dropdown,mouse-pointer,Delphi,Combobox,Dropdown,Mouse Pointer,我的问题是: 我有一个表格,只有一个组合框 当项目3发生时,组合框具有焦点,并且鼠标未悬停在窗体上 我触发组合框的下拉列表以在按键事件中显示 当下拉列表可见,然后我将鼠标指针移到窗体上时,该指针不可见,表示正忙,或显示调整大小图标,但在窗体上时不会返回到正常指针 当组合框的下拉框显示时,当我将鼠标指针移动到窗体上时,是否可以确保鼠标指针可见 我试过: application.ProcessMessages显示下拉列表后 显示下拉列表后,将焦点更改为组合框所在的窗体 添加键:=#0 proced
显示下拉列表后application.ProcessMessages
- 显示下拉列表后,将焦点更改为组合框所在的窗体
- 添加
键:=#0调用下拉列表显示后的代码>
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char); begin SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, Integer(True), 0); Key := #0; end;
- 尝试使用计时器触发按键事件中的下拉列表
- 命令下拉菜单出现后,尝试使用“设置光标”
- 尝试使用“.DroppedDown”,但未发现与“SendMessage”的结果有任何差异
(注意:我遇到的这个问题不是德尔福独有的。我可以使用Visual C#2017复制这个问题。无论哪种方式,如果有办法纠正这个问题,最好知道)。正如对这个问题的评论,这个问题与德尔福无关。您可以在包含操作系统显示的类似组合的对话框中观察到相同的行为。“运行”对话框上的一个示例 涉及单个环境时,在
OnDropDown
事件处理程序中重新设置光标可以解决此问题
procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
winapi.windows.SetCursor(Screen.Cursors[Cursor]);
end;
最初我测试了上面的内容,因为在下拉列表之后没有人调用
SetCursor
。虽然以前似乎也没有人叫它。因此,我不知道上述修复的原因或原因。您是否尝试过执行ComboBox1.DroppedDown:=True
而不是SendMessage
?@OlvinRoght,我只是尝试了你的建议,但是我得到了关于鼠标指针的相同结果(在窗体上移动时不会刷新)。我不知道你提到的属性,所以我可能会切换到它。我可以用操作系统的“运行”对话框中的组合来复制它。但并不总是这样,通常只有在我第一次调用对话框时。看来这与德尔福无关。虽然可以在下拉组合时设置光标(通过API)以响应WM_NCHITTEST(这是表单由于捕获而收到的唯一鼠标消息),但我不想麻烦它。当然,如果你对表单有一个与客户端对齐的控件,那么你必须在那里处理它。奇怪的是,似乎没有人调用user32.SetCursor。我误解了你之前的评论。我不知道有一个“下拉”事件。当我尝试你展示的东西时,效果非常好!谢谢不客气!谢谢你的评论。这不是我第一次不能表达,语言可能。。。