Combobox i OnMouseDown

0

Witam!

Potrzebuję comboboxa który obsługiwałby zdarzenia OnMouseDown i OnMouseUp.

Może jakieś wskazówki jak się do tego zabrać? Lepiej napisać samemu czy może skorzystać z gotowego komponentu? Jeśli z gotowego to może ktoś coś poleci?

Tomek

0

Witam

Tomek634 napisał(a)

Witam!

Potrzebuję comboboxa który obsługiwałby zdarzenia OnMouseDown i OnMouseUp.

Może jakieś wskazówki jak się do tego zabrać? Lepiej napisać samemu czy może skorzystać z gotowego komponentu? Jeśli z gotowego to może ktoś coś poleci?

Tomek

Można opublikować zdarzenia OnMouseDown i OnMouseUp:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TExtComboBox = class(TComboBox)
  private
  public
  published
    property OnMouseDown;
    property OnMouseUp;
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  protected

  private
    { Private declarations }
    ExtComboBox: TExtComboBox;
    procedure ExtComboBoxMouseDown(Sender: TObject; Button: TMouseButton;
                     Shift: TShiftState; X, Y: Integer);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ExtComboBoxMouseDown(Sender: TObject; Button: TMouseButton;
                     Shift: TShiftState; X, Y: Integer);
begin
  ShowMessage('OnMouseDown');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ExtComboBox:= TExtComboBox.Create(Self);
  ExtComboBox.Parent:= Form1;
  ExtComboBox.Left:= 10;
  ExtComboBox.Top:= 10;
  ExtComboBox.OnMouseDown:= ExtComboBoxMouseDown;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ExtComboBox.Free;
  ExtComboBox:= nil;
end;

end.

Jednak i tak zdarzenia będa wywoływane tylko przy kliknięciu na przycisk ze strzałką za pomocą którego rozwijana jest lista.

Próba przechwycenia w sposób komunikatu WM_LBUTTONDOWN (i reszty komunikatów na pewno też) kończy się tym samym

  protected
    procedure WMMouseDown(Msg: TMessage); message WM_LBUTTONDOWN;

Więc z tego wniosek że aby wywołać ten komunikat po kliknięciu w dowolnym miejscu ComboBox chyba trzeba napisać własny komponent.

Pozdrawiam

0

Dziękuję za informację.

Szkoda, że nie ma niczego gotowego :-)

Pozdrawiam
Tomek

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.