![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() подскажите как отловить?
есть Image, надо сделать ему два события, onClick и OnDblClick, но перед двойным нажатием происходит Клик и ничего не получается. Желательно код в пример привести,а то погуглил, многие пишут таймером ,или Shift на Mousedown смотреть,но конкретного примера нигде не нашел. |
#2
|
||||
|
||||
![]() И не найдёшь, DblClick является продолжением Click.
|
#3
|
|||
|
|||
![]() Цитата:
|
#4
|
||||
|
||||
![]() Конечно, но при этом про клик забывают. Есть конечно выход, заведи переменную, взводи по клику и сбрасывай по дблклику. Остальное додумаешь?
|
#5
|
|||
|
|||
![]() Цитата:
сделал следующую причуду: прадва думаю это плохой вариант,потому что при одинарном клике словно тормознутось возникает небольшая,хотя наверное если юзер не знает о таймере то эту тормознутось не заметит)) интревал таймера поставил 200 Код:
var i:Integer=0; ... procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled:=false; if i>1 then ShowMessage('двойной') else ShowMessage('одинарный'); i:=0; end; procedure TForm1.Button1Click(Sender: TObject); begin Inc(i); Timer1.Enabled:=True; end; Последний раз редактировалось Snake22, 02.07.2011 в 22:03. |
#6
|
||||
|
||||
![]() Без выкрутас:
|
#7
|
|||
|
|||
![]() аа понял о чём ты.но как обычно мне это не подходит.да, при открытии ярлычка в проводнике событие "выделить" в любом случае происходит. как и с картинкой.на тут событие одиночный клик полюбому происходит.
но если прописать туда например showmessage то уже дблклик не сработает,вот в чём загвоздка |
#8
|
||||
|
||||
![]() Ты почитай про то, как Винда посылает эти сообщения приложению, и многое станет ясно.
Поясню: У винды нет события Click, имеются сообщения "WM_LBUTTONDOWN", "WM_LBUTTONUP". Последний раз редактировалось angvelem, 02.07.2011 в 22:34. |
#9
|
||||
|
||||
![]() так даже при двойном клике присходит выделение сначало
![]() но потом снимается |
#10
|
|||
|
|||
![]() да я то думал программисты какой нибудь стандартный способ придумали как реализовать это дело,а то не очень приятно када сделано кое как...
|
#11
|
||||
|
||||
![]() Пробуй так:
|
#12
|
|||
|
|||
![]() Тут все закоментировано. Есть вопросы спрашивай. Сделал под Image.
Код:
procedure TForm1.Image1Click(Sender: TObject); var Msg: TMsg; ControlTime: Longword; begin Form1.Tag := 0; // Определение размера контролируемого отрезка времени ControlTime := GetTickCount + GetDoubleClickTime; // Ожидание повторного щелчка мышью на контролируемом отрезке while GetTickCount < ControlTime do if PeekMessage(Msg, Form1.Handle, WM_LBUTTONDBLCLK, WM_LBUTTONDBLCLK, PM_NOREMOVE) then Begin ShowMessage('Двойной щелчок'); // Обработка событий по двойному щелчку Form1.Tag := 1; end; if Form1.Tag = 1 then exit else begin ShowMessage('Одинарный щелчок'); // Обработка событий по одинарному щелчку end end; Последний раз редактировалось antikiler, 03.07.2011 в 00:05. |