Форум: "Потрепаться";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизА что есть 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c