1

我试图隐藏从 TComboBox 派生的第三方组件中的下拉按钮。

我尝试将样式设置为 csSimple,但这个解决方案对我不起作用......第三方组件中有代码在各个地方检查 csSimple。我宁愿不更改此代码。

从我从其他帖子中可以看出,其他人建议使用不同的组件,例如文本框,或者用一些东西覆盖下拉箭头以隐藏它。我也想避免这些解决方案。

还有其他方法吗?我在想也许有一种方法可以使用 PostMessage/SendMessage 来做到这一点,但我不知道该作为参数传递什么。

谢谢

4

1 回答 1

0

来自AlphaControls的Serge Goncharov提出了一个非常黑暗(但可操作)的解决方案。它涉及到访问TDBLookupControl 的前两个私有变量FDataList 和FButtonWidth。

他的解决方案如下:

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBCtrls, sDBLookupComboBox, StdCtrls, sCheckBox, XPMan,
  sSkinProvider, sSkinManager;

type
  TForm1 = class(TForm)
    DBLookupComboBox1: TDBLookupComboBox;
    CheckBox1: TCheckBox;
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  StoredWidth: integer;

implementation

{$R *.dfm}

type
  TAccessLookUpCombo = class(TDBLookupControl)
  public
    FDataList: TPopupDataList;
    FButtonWidth: Integer;
  end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked then
    TAccessLookUpCombo(DBLookupComboBox1).FButtonWidth := StoredWidth
  else begin
    StoredWidth := TAccessLookUpCombo(DBLookupComboBox1).FButtonWidth;
    TAccessLookUpCombo(DBLookupComboBox1).FButtonWidth := 0;
  end;
  DBLookupComboBox1.Invalidate;
end;

end.

使用 TAccessLookUpCombo(DBLookupComboBox1) 构造,您可以访问父级的 TDBLookupControl 顶部值。确实非常丑陋,但它恰好起作用。

于 2018-01-09T12:11:22.733 回答