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
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
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
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.