Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.045 c
15-1216058157
{RASkov}
2008-07-14 21:55
2008.09.14
Брак ли?


2-1217636950
Res
2008-08-02 04:29
2008.09.14
beginthread


2-1217531336
Newss
2008-07-31 23:08
2008.09.14
Пересечение фигур


2-1217707354
demon
2008-08-03 00:02
2008.09.14
API и меню


3-1205917843
pavel_guzhanov
2008-03-19 12:10
2008.09.14
rf сделать в запросе два варианта записи в одно поле?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский