我试图隐藏从 TComboBox 派生的第三方组件中的下拉按钮。
我尝试将样式设置为 csSimple,但这个解决方案对我不起作用......第三方组件中有代码在各个地方检查 csSimple。我宁愿不更改此代码。
从我从其他帖子中可以看出,其他人建议使用不同的组件,例如文本框,或者用一些东西覆盖下拉箭头以隐藏它。我也想避免这些解决方案。
还有其他方法吗?我在想也许有一种方法可以使用 PostMessage/SendMessage 来做到这一点,但我不知道该作为参数传递什么。
谢谢
我试图隐藏从 TComboBox 派生的第三方组件中的下拉按钮。
我尝试将样式设置为 csSimple,但这个解决方案对我不起作用......第三方组件中有代码在各个地方检查 csSimple。我宁愿不更改此代码。
从我从其他帖子中可以看出,其他人建议使用不同的组件,例如文本框,或者用一些东西覆盖下拉箭头以隐藏它。我也想避免这些解决方案。
还有其他方法吗?我在想也许有一种方法可以使用 PostMessage/SendMessage 来做到这一点,但我不知道该作为参数传递什么。
谢谢
来自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 顶部值。确实非常丑陋,但它恰好起作用。