Главная страница
    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.067 c
15-1216713031
Azize
2008-07-22 11:50
2008.09.14
Cамый экономичный компьютер в мире


15-1216662309
Вася
2008-07-21 21:45
2008.09.14
Не могу запустить Делфи


3-1205910143
scorpio_md
2008-03-19 10:02
2008.09.14
Объединение 2 таблиц


2-1217844272
Vlad Oshin
2008-08-04 14:04
2008.09.14
Съедаются одиночные клики мышкой.


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский