Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: 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 вся ветка

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.066 c
3-1099227035
Тимохов
2004-10-31 15:50
2004.12.05
Проблемы с ADO и multiple recordsets


14-1100185521
panov
2004-11-11 18:05
2004.12.05
Нужна критика кода-)


1-1100852536
Arick
2004-11-19 11:22
2004.12.05
C++ и D7


1-1100718079
bug008
2004-11-17 22:01
2004.12.05
Изменение графика TChart при помощи мыши


3-1099493944
denis24
2004-11-03 17:59
2004.12.05
динамический report