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.
Chyba najłatwiejszą metodą jest dwukrotne wywołanie onClick() w obsłudze onDoubleClick() ;p
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ć... :/
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.