Скрыть кнопку ComboBox Delphi, не устанавливая стиль для csSimple - PullRequest
1 голос
/ 28 ноября 2011

Я пытаюсь скрыть кнопку раскрывающегося списка в стороннем компоненте, производном от TComboBox.

Я попытался установить стиль для csSimple, но это решение не работает для меня ... В стороннем компоненте есть код, который проверяет наличие csSimple в разных местах. Я бы предпочел не менять этот код.

Из того, что я вижу из других постов, другие предложили использовать другой компонент, например, текстовое поле, или прикрыть стрелку раскрывающегося списка чем-нибудь, чтобы скрыть его. Я тоже хочу избегать этих решений.

Есть ли другой способ? Я думал, может быть, есть способ сделать это с PostMessage / SendMessage, но я не знаю, что передать в качестве параметров.

Спасибо

1 Ответ

0 голосов
/ 09 января 2018

Серж Гончаров из AlphaControls предложил очень мрачное (но оперативное) решение этой проблемы. Он включает в себя доступ к двум верхним частным переменным 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. Очень некрасиво, но это сработало.

...