Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
ВнизСъедаются одиночные клики мышкой. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.044 c