首页 > 解决方案 > 将 TComboBox.DroppedDown 设置为 true 时,如何防止鼠标光标消失?

问题描述

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

展示行为。

  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.

标签: delphitcombobox

解决方案


推荐阅读