将TComboBox.DroppedDown设置为true时,如何防止鼠标光标消失?

时间:2019-03-05 21:45:14

标签: delphi tcombobox

在Delphi 2007中,我试图强制TComboBox下拉,但是当我这样做时,在控件进行编辑并且鼠标悬停在窗体上方时,鼠标光标消失了。在阅读了关于使用TComboBox实现过滤器功能的SO answer之后,我想到了这个想法。

演示行为。

  1. 运行下面的示例代码(到2007年可能需要时间机器)
  2. 单击组合框
  3. 开始输入。

在示例代码中,您可以看到我尝试过的两种变通办法,但都没有奏效。

可以克服消失的光标吗?

也欢迎使用另一个自由控件/组件,该控件可以实现在键入时过滤列表的相同目标。我需要根据项目中是否包含文本来过滤项目,因此自动完成路由似乎不是一个选择。

干杯

unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure ComboChange(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.AutoComplete := false;
  ComboBox1.Style := csDropDown;
  ComboBox1.OnChange := ComboChange;

  ComboBox1.Items.Add('One');
  ComboBox1.Items.Add('Two');
  ComboBox1.Items.Add('Three');
end;

procedure TForm1.ComboChange(Sender: TObject);
begin
  { First Try }
  ComboBox1.DroppedDown := true;

  { Second Try }
  //PostMessage((Sender as TComboBox).Handle, CB_SHOWDROPDOWN, 1, 0);

  { Grasping at straws }
  //ShowCursor(true);
end;


end.

0 个答案:

没有答案