Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
19-04-2007 09:32
Не знаю что такое асинхронные сообщения, может кто подскажет?
PostMessage
Не знаю что такое асинхронные сообщения, может кто подскажет? ( Знаю только SendMessageTimeout() и думаю это прекрасная идея! ).
Вобщем как-то так:
case ( Message )
WM_TIMER:begin
KillTimer(Wnd,1);
//doing something for single click
end;
PM_NOTIFY:
case( lParam )
WM_LBUTTONUP:SetTimer(Wnd,1,GetDoubleClickTime,nil);
WM_LBUTTONDBLCLK:begin
KillTimer(Wnd,1);
//doing something for double click
end;
end;
end;
Да, спасибо, DRON, именно так и сделал, вот только нужно немного исправить GetDoubleClickTime() + 10, ну вдруг юсер два раза нажмет ровно с периодом GetDoubleClickTime(), вот тогда и нужно будет еще 10 мс для обработки WM_LBUTTONDBLCLK и удаления таймера! Вероятность, конечно, мала, но все же! :-)
у так и прекрасно, по одинарному клику показывайте окно, а по двойному ещё и опции открывайте, а то опции без основного окна не очень смотрятся :)
Я вот сейчас проверил все иконки (15 штук) что у меня в трее и за единственным исключением они понимают или двойной или одинарный клик, но не два одновременно, так что не усложняйте работу с программой, всякие настройки можно и в контекстное меню запихать. А единственное исключение, это "Безопасное извлечение устройств" и эксперимент показал, что там всё как раз на таймере работает (и лично меня, появляющаяся при этом задержка, несколько раздражает)
Да, спасибо за указание, а то сам и не догадался проверить!
P.S. Меня тоже если често, вымораживает задержка, но уж хотел так сделать и сделал. Еще раз спасибо всем!
Тогда посылайте себе асинхронное сообщение (свое).
В данном случае это не сработает, нужен именно таймер, период которого можно узнать с помощью GetDoubleClickTime.
А если я хочу по двойному щелчку запустить опции проги, а по одинарному - главное окно.
Ну так и прекрасно, по одинарному клику показывайте окно, а по двойному ещё и опции открывайте, а то опции без основного окна не очень смотрятся :)
Я вот сейчас проверил все иконки (15 штук) что у меня в трее и за единственным исключением они понимают или двойной или одинарный клик, но не два одновременно, так что не усложняйте работу с программой, всякие настройки можно и в контекстное меню запихать. А единственное исключение, это "Безопасное извлечение устройств" и эксперимент показал, что там всё как раз на таймере работает (и лично меня, появляющаяся при этом задержка, несколько раздражает).
А вы по нажатии левой кнопки стартуйте таймер, если он не запущен. По двойному щелчку делайте, что вам надо. По тику таймера проверяйте, что не было двойного щелчка, если не было, делайте, то, что нужно для одинарного щелчка. Таймер выключайте.
подскажите пожалуйста, как из разделить!
А не надо ничего делить, это стандартное поведение. Перед даблкликом всегда приходит одиночный клик, так работает Windows и все Delphi-йские контролы (OnClick, OnDblClick).
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.