Создание ComboBox без рамки

Тема в разделе "Delphi", создана пользователем WinHack, 27 ноя 2016.

  1. WinHack
    Как создать плоский (без границ) ComboBox? Простой пример такого решения:

    Код:
    { ... }
    TNoBorderComboBox = class(TComboBox)
      protected
        procedure WMPaint(var Msg: TMessage); message WM_PAINT;
      end;
    
    procedure TNoBorderComboBox.WMPaint(var Msg: TMessage);
    var
      C: TControlCanvas;
      R: TRect;
    begin
      inherited;
      C := TControlCanvas.Create;
      try
      C.Control := Self;
      with C do
      begin
        Brush.Color := clBtnFace;
        R := ClientRect;
        FrameRect(R);
        InflateRect(R, - 1, - 1);
        FrameRect(R);
        end;
      finally
        C.Free;
      end;
    end;
    Использование


    Для использования этого компонента нужно подключить модуль с этим кодом (если он, конечно, вынесен в отдельный модуль) в раздел uses. Затем в событии OnCreate формы создать этот компонент. Вот пример использования:

    Код:
    uses
      { ... } ;
    
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      cb: TNoBorderComboBox; // Создаем переменную
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      cb:= TNoBorderComboBox.Create(Self); // Создание объекта
      cb.Parent:= Self;  // Назначаем родителя
      cb.Left:= 100;  // Координата X
      cb.Top:= 100;  // Координата Y
      cb.Width:= 200;  // Ширина
      cb.Text:= 'Flat ComboBox'; // Для проверки, чтобы не был пустым
    end;
    
    end.
    
    Есть и другие варианты, но это как один из них.