Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.14;
Скачать: CL | DM;

Вниз

Съедаются одиночные клики мышкой.   Найти похожие ветки 

 
Vlad Oshin ©   (2008-08-04 14:04) [0]

На форме есть компанент, он съедает одиночный клик мышкой. Не реагирует никак, на двойной клик реагирует.
Полез в его реализацию - запутался.

Есть идея перехватить у него клик и послать двойной на этом месте:
procedure TfrmDepartment.WmLButtonDown (var Message: TWMMouse);
var
x,y:integer;
pt:tPoint;
begin

 inherited;
 if fl then exit else fl:=not(fl);
 x:= Message.XPos;
 y:= Message.YPos;
 if ((X>GrdDepartment.Left) and (X<GrdDepartment.Width))// and (y>GrdDepartment.Top) and (y<GrdDepartment.Height))
  then begin
     Pt.x := x;
     Pt.y := y;
     //Преобразуем Pt к координатам экрана
     Pt := ClientToScreen(Pt);
     //к аболютным координатам курсора мышки
     Pt.x := Round(Pt.x * (65535 / Screen.Width));
     Pt.y := Round(Pt.y * (65535 / Screen.Height));
     //Переместим курсор мыши
     Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0);
       //Имитируем нажатие левой кнопки мыши
     Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0);
     //Имитируем отпускание левой кнопки мыши
     Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0);
     Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0);
     Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0);
  end;


Это работает, если кликнуть по форме,
если же кликнуть на компаненте, то клик опять съедается и ничего не происходит.

Как быть? Как заменить клик на 2клик, если первый клик "съедается"?
(там первый клик что-то инициализирует, насколько понял, но очень долго, по модулям скакать, и не по одному..)


 
Vlad Oshin ©   (2008-08-04 14:34) [1]

все, спасибо
забыл флаг скинуть еще до этого :)


 
KilkennyCat ©   (2008-08-04 15:40) [2]

Как сказал Johnmen,
Да, пож-та, нет пр-ем :)


 
Vlad Oshin ©   (2008-08-05 09:28) [3]

нет, все-таки съедаются..
продублировал второе нажатие

 if fl then exit else fl:=true; //fl - пока truе, повторного входа в процудуру не будет
 pt.X:=x;  pt.Y:=y;
 Pt := ClientToScreen(Pt);  //Преобразуем Pt к координатам экрана
 Pt.x := Round(Pt.x * (65535 / Screen.Width));  //Преобразуем Pt к аболютным координатам курсора мышки
 Pt.y := Round(Pt.y * (65535 / Screen.Height));
 //делаем еще одно лишнее нажатие (чтоб не срабатывало и на него эта же процедура и нужна fl)
 application.ProcessMessages;
 Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0);
 application.ProcessMessages;
 Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0);
 application.ProcessMessages;
 Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0);
 application.ProcessMessages;
 fl:=false; //разрешаем следующий вход


, но начальник забраковал, сказал искать причину
а в приложении все работает как надо, а из dll вот такая ерунда..


 
Vlad Oshin ©   (2008-08-05 09:32) [4]

может попробовать динамически компанент создать? Может он чего подхватывает неверно?
cxGrid это от DevExpress.  
А DBGrid, StringGrid, из стандартных, реагируют как положено


 
Leonid Troyanovsky ©   (2008-08-05 15:36) [5]


> Vlad Oshin ©   (05.08.08 09:28) [3]

> а в приложении все работает как надо, а из dll вот такая

> может попробовать динамически компанент создать? Может он
> чего подхватывает неверно?

Видимо, в ём есть ссылки на глобальные переменные Application,
Screen & etc.

Да, и передай начальнику, что классы в dll - bad design.

--
Regards, LVT.



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.034 c
11-1193050704
DevilDevil
2007-10-22 14:58
2008.09.14
механизм MCK. как реализовать?


3-1204711854
Ega23
2008-03-05 13:10
2008.09.14
Порядок таблиц в left join


15-1216734281
VirEx
2008-07-22 17:44
2008.09.14
Дизайн детей (не дали договорить)


3-1205735599
Karburator
2008-03-17 09:33
2008.09.14
события открытия и закрытия списка поля в DBGrid-e


2-1217826999
deadteachers
2008-08-04 09:16
2008.09.14
Связи между БД