Blokada podwójnego kliknięcia w komponencie - jak?

0

Witam.
Stworzyłem własny komponent (na bazie klasy TCustomControl) i chciałbym w nim zablokować "podwójne kliknięcie", żeby uzyskać efekt jak jak np. w TButton - podwójne kliknięcie ma być traktowane jako dwa "zwykłe" kliknięcia.
Kiedyś to już stosowałem, ale wyleciało mi z głowy, chyba się starzeję ;)
Bardzo proszę o pomoc.

1

Chyba najłatwiejszą metodą jest dwukrotne wywołanie onClick() w obsłudze onDoubleClick() ;p

0

Chyba najłatwiejszą metodą jest dwukrotne wywołanie onClick() w obsłudze onDoubleClick() ;p

To sposób trochę taki "na około" i jego wadą jest stosowanie po stronie aplikacji, a nie komponentu, co pociąga za sobą konieczność pamiętania o tym w przypadku wszystkich użytych w aplikacji komponentów. Pamiętam natomiast, że istnieje prosty i elegancki sposób, który implementuje się w kodzie samego komponentu. Tyle, że samego sposobu już nie mogę sobie przypomnieć... :/

0
nyquist napisał(a)

{...} co pociąga za sobą konieczność pamiętania o tym w przypadku wszystkich użytych w aplikacji komponentów.

ja bym to rozwiazal tak (na przykładzie TPanel):

type TPanel = class(ExtCtrls.TPanel)
  private
    procedure OnDbl(var msg:TMessage); message WM_LBUTTONDBLCLK;
end;

i pozniej w implementacji:

{ TPanel }

procedure TPanel.OnDbl(var msg: TMessage);
begin
 if Assigned(self.onClick) then
    self.OnClick(self);
end;

lub (poniewaz TPanel posiada juz event onDoubleClick i procedure DblClick):

type TPanel = class(ExtCtrls.TPanel)
  published
    procedure DblClick; override;
end;

{...}

procedure TPanel.DblClick;
begin
 if Assigned(self.onDblClick) //jesli jest przypisana procedura dla podwojnego klikniecia..
    then inherited                 //..to ja wykonaj.
    else                      //jesli, do onDblClick nie ma przypisanej zadnej procedury...
     if Assigned(self.onClick)  //ale jest przypisana do onClick..
      then self.OnClick(self);    //to wywolaj onClick
end;

od teraz kazdy TPanel na formie bedzie w momencie podwojnego klikniecia automatycznie wykonywal procedure przypisana do OnClick.

1 użytkowników online, w tym zalogowanych: 0, gości: 1