![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |