在命令下拉组合框显示后鼠标移动到窗体上时,如何确保鼠标指针出现?

问题描述 投票:3回答:1

我有一个问题:

  1. 我有一个只有一个组合框的表格。
  2. 组合框具有焦点,当项目3发生时,鼠标不会悬停在表格上。
  3. 我触发组合框的下拉列表以显示按键事件。

当下拉列表可见,然后我将鼠标指针移动到表单上时,指针要么不可见,要么显示它正忙,要么显示调整大小图标,但在表单上方时不会返回正常指针。

有没有什么可以做的,以确保当组合框的下拉显示时,当我将指针移到表单上时鼠标指针是可见的?

我试过了:

  • Applicaiton.ProcessMessages显示下拉后。
  • 在显示下拉列表后,将焦点更改为组合框所在的形式。
  • 在调用下拉列表后添加Key := #0;procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char); begin SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, Integer(True), 0); Key := #0; end;
  • 尝试使用计时器触发按键事件中的下拉菜单。
  • 在命令下拉列表出现后尝试使用“SetCursor”。
  • 尝试使用“.DroppedDown”,但没有看到“SendMessage”的结果有任何差异。

我希望能够在显示下拉列表后显示鼠标指针,但它会被隐藏。谢谢你的任何建议。

(注意:我遇到的这个问题并不是Delphi所独有的。我能够使用Visual C#2017复制该问题。无论哪种方式,如果有办法纠正这个问题,最好知道)。

delphi combobox dropdown mouse-pointer
1个回答
1
投票

正如已经对这个问题所评论的那样,问题与Delphi无关。您可以在对话框中观察到相同的行为,其中包含操作系统提供的类似组合。一个例子是“运行”对话框中的一个。

涉及单个环境,在OnDropDown事件处理程序中重新设置光标可以解决问题。

procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
  winapi.windows.SetCursor(Screen.Cursors[Cursor]);
end;

最初我测试了上面因为没有人在下拉后调用SetCursor。虽然似乎没有人先称之为。所以我不知道上述修复的原因或原因。

© www.soinside.com 2019 - 2024. All rights reserved.