Вниз
Скачать: CL | DM;

А что есть OnClick?   Найти похожие ветки 

 
Ega23 ©   (2004-11-17 15:01) [0]

Кто решает, что это именно клик? Вот есть WM_LBUTTONDBLCLK, WM_LBUTTONDOWN и WM_LBUTTONUP. А где WM_LBUTTONCLK?


 
clickmaker ©   (2004-11-17 15:06) [1]

OnClick - это WM_LBUTTONDOWN + WM_LBUTTONUP


 
Игорь Шевченко ©   (2004-11-17 15:06) [2]


>  А где WM_LBUTTONCLK?


А зачем ? Click считается по отпусканию кнопки, следовательно WM_LBUTTONUP


 
Ega23 ©   (2004-11-17 15:07) [3]

Это понятно. А кто решает в каком интервале оны должны придти? Кто решает - это 2 разных клика или один даблклик?


 
KSergey ©   (2004-11-17 15:11) [4]

Винда решает. Учитывается время и расстояние, на которое сместилась мышь между кликами. Время - точно регулируется в настройках, размер региона - не помню.

Фактически, приходят:

WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK

(прошу прощения, если это и так все знают)

PS
Так, стоп: почему Игорь написал, что "Click считается по отпусканию кнопки"? Выходит даюл-кли - все же по нажатию?


 
Игорь Шевченко ©   (2004-11-17 15:11) [5]

Ega23 ©   (17.11.04 15:07) [3]

В Windows есть настройка временного интервала, если в течении его кнопку нажали дважды, то генерируется DblClick. Открываешь панель управления|Мышь и видишь настройку скорости двойного щелчка.


 
Ega23 ©   (2004-11-17 15:26) [6]

Всё, понял.

procedure TControl.WMLButtonDown(var Message: TWMLButtonDown);
begin
 SendCancelMode(Self);
 inherited;
 if csCaptureMouse in ControlStyle then MouseCapture := True;
 if csClickEvents in ControlStyle then Include(FControlState, csClicked);
 DoMouseDown(Message, mbLeft, []);
end;

procedure TControl.WMLButtonUp(var Message: TWMLButtonUp);
begin
 inherited;
 if csCaptureMouse in ControlStyle then MouseCapture := False;
 if csClicked in ControlState then
 begin
   Exclude(FControlState, csClicked);
   if PtInRect(ClientRect, SmallPointToPoint(Message.Pos)) then Click;
 end;
 DoMouseUp(Message, mbLeft);
end;


 
Ega23 ©   (2004-11-17 15:28) [7]

Всё, понял.

procedure TControl.WMLButtonDown(var Message: TWMLButtonDown);
begin
 SendCancelMode(Self);
 inherited;
 if csCaptureMouse in ControlStyle then MouseCapture := True;
 if csClickEvents in ControlStyle then Include(FControlState, csClicked);
 DoMouseDown(Message, mbLeft, []);
end;

procedure TControl.WMLButtonUp(var Message: TWMLButtonUp);
begin
 inherited;
 if csCaptureMouse in ControlStyle then MouseCapture := False;
 if csClicked in ControlState then
 begin
   Exclude(FControlState, csClicked);
   if PtInRect(ClientRect, SmallPointToPoint(Message.Pos)) then Click;
 end;
 DoMouseUp(Message, mbLeft);
end;


 
NAlexey ©   (2004-11-17 16:01) [8]

GetSystemMetrics->SM_CXDOUBLECLK, SM_CYDOUBLECLK


 
Piter ©   (2004-11-17 22:43) [9]

Ega23 ©   (17.11.04 15:26) [6]

угу. Нажатие мышки над кнопкой и ее отпускание считаются за клик (при этом не важно, если мышка покинула пределы кнопки), а вовсе не WM_LBUTTONUP, как говорит Игорь. Можно провести простой эксперимент, нажать левую кнопку мыши над формой, потом перевести курсор на Button, потом отпустить левую кнопку мыши - OnClick не будет...


 
Игорь Шевченко ©   (2004-11-17 22:46) [10]

Забыл я добавить, что при отпускании после нажатия на одним и тем же окном :) Так вы ж поправили, спасибо:)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
1-1101145900
Dmitry_04
2004-11-22 20:51
2004.12.05
Подскажите пожалуйста по поводу модуля Menus


14-1100796182
Marina_Sm
2004-11-18 19:43
2004.12.05
пример COM a на Delphi


14-1100791891
PVOzerski
2004-11-18 18:31
2004.12.05
Загадочная история с CPPBuilder 6


14-1100520774
jonik_dk
2004-11-15 15:12
2004.12.05
Программа не работает на чужом компьютере


1-1100685529
Lola
2004-11-17 12:58
2004.12.05
Вывести список файлов из папки, в имени которой есть побел




   Наверх