【问题标题】:Hide ComboBox Button Delphi without setting Style to csSimple隐藏组合框按钮 Delphi 而不将样式设置为 csSimple
【发布时间】:2011-11-28 19:42:25
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

  • 与控件竞争可能是不明智的。
  • 我同意安德烈亚斯的观点。为什么需要使用这个不能满足您需要的自定义控件?我已经查看了MSDN Combo Box 并且没有任何方法可以隐藏组合按钮而不将样式设置为简单,我至少可以找到。
  • 感谢您查看 MSDN。在使用遗留代码时,有些情况需要这些事情。我可能最终会编写自己的组件,但是隐藏按钮的简单 winmsg 会很有帮助。
  • 重复:make ComboBox drop-down button invisible in Delphi?。如果您透露了(第 3 次)当事人,则可能有人提供了与其他问题一样的答案。
  • @SertacAkyuz:我们正在使用 JVCL。两个组件,第一个是 TJvDBLookupComboEdit,它最终继承自 TCustomMaskEdit(不是 TCustomComboBox),它们实际上有一个 FShowButton 属性,我们可以利用它。第二个是 TJvDBComboBox,它确实继承自 TCustomComboBox。这是我遇到的麻烦。谢谢!

标签: delphi combobox sendmessage postmessage


【解决方案1】:

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 顶部值。确实非常丑陋,但它恰好起作用。

【讨论】:

  • 我刚刚意识到它只适用于 TDBLookupComboBox。不适用于 TLookupCombo。
  • TComboBox 也不是。
猜你喜欢
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2023-04-01
  • 2018-11-06
相关资源
最近更新 更多