Как разделить обработку OnClick и OnDblClick? Ведь OnClick будет вызываться всегда, и перед DblClick.

Именно так и происходит в Windows - посылаются оба сообщения. Для того чтобы обработать только какое-то одно событие необходимо чуть "задержать" выполнение OnClick. Сделать это можно следующим способом:

procedure TForm1.ListBox1Click(Sender: TObject);

var

 Msg: TMsg;

 TargetTime: Longint;

begin

 { get the maximum time to wait for a double-click message }

 TargetTime := GetTickCount + GetDoubleClickTime;

 { cycle until DblClick received or wait time run out }

 while GetTickCount < TargetTime do

  if PeekMessage(Msg, ListBox1.Handle, WM_LBUTTONDBLCLK, WM_LBUTTONDBLCLK, WM_NOREMOVE)

  then Exit; { Double click }

 MessageDlg('Single clicked', mtInformation, [mbOK], 0);

end;

Нашел альтернативное решения данной проблемы на англоязычном сайте, мне помогло))

Lutz Kutsche

Delphi Developer

Sat, 01 Dec 2001 03:00:00 GMT
Re:OnClick and OnDblClick

Hi Iain,

I haven't found a way to suppress the OnClick event, but I found a
workaround for it.
The problem is, that the OnClick event gets fired _before_ the
OnDblClick, so we need a way to
change that behaviour.
To accomplish this, I started the OnClick handler like this:

type
TFrmMain = class(TForm)
...
private
DoubleClicked: Boolean;
end;

procedure TFrmMain.ControlClick(Sender: TObject);
begin
Application.ProcessMessages;
if DoubleClicked then begin
DoubleClicked := false;
Exit;
end;

...{your code}

end;

procedure TFrmMain.ControlDblClick(Sender: TObject);
begin
DoubleClicked := True;

...{your code}

end;

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...