Главная страница
    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.044 c
15-1216754255
Polevi
2008-07-22 23:17
2008.09.14
xslt


15-1216779181
Slider007
2008-07-23 06:13
2008.09.14
С днем рождения ! 23 июля 2008 среда


2-1217490630
Sergey2
2008-07-31 11:50
2008.09.14
проблема с Вистой


2-1217517743
altatr
2008-07-31 19:22
2008.09.14
Использование процедур


2-1217688322
Shik0
2008-08-02 18:45
2008.09.14
как вставит картинки TImage





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