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

Вниз

Click по приложению   Найти похожие ветки 

 
azl ©   (2007-01-14 17:38) [0]

Здравствуйте, уважаемые мастера.
Подскажите, пожалуйста, как можно определить был ли произведен щелчек мышкой на моем приложении (на любом компоненте, в том числе и на кпопке в панели задач), чтобы не прописывать у каждого компонента событие OnClick? На форме много компонентов, причем у некоторых компонентов уже прописано свое значение OnClick.

Спасибо.


 
Desdechado ©   (2007-01-14 18:53) [1]

> произведен щелчек мышкой на моем приложении
Это переключение на твое приложение с другого или вообще что ни попадя?


 
azl ©   (2007-01-14 20:18) [2]

Допустим есть Форма на ней 10 кнопок, 2 Memo, TreeView и т.д.

if Click, например, по Memo или по одной из кнопокна форме, по кнопке на панели задач (а точнее значке в tray) then
 ShowMessage("Вы щелкнули по приложению (программе или как еще назвать)");

Вот что мне нужно.


 
FAskerQ   (2007-01-14 20:44) [3]

Может подойдёт это

Кидаете на форму ApplicationEvents

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);
begin
 if  msg.wParam = VK_LBUTTON then
   Caption:= "Вы щелкнули по приложению (программе или как еще назвать)";
end;


P.S.
 ShowMessage не советую использовать


 
azl ©   (2007-01-14 21:02) [4]

Да, это работает, спасибо. А вот если по заголовку окна шелкать, то ничего не происходит. Можно ли это как-то решить?


 
FAskerQ ©   (2007-01-14 21:35) [5]

private
   { Private declarations }
   procedure WMNCLBUTTONDOWN(var msg: TMessage); message

procedure TForm1.WMNCLBUTTONDOWN(var msg: TMessage);
begin
 if msg.wParam = HTCAPTION then Caption := "Left Click!";
 inherited;
end;


 
FAskerQ ©   (2007-01-14 21:36) [6]

Ошибся чуток первый раз

private
  { Private declarations }
  procedure WMNCLBUTTONDOWN(var msg: TMessage); message WM_NCLBUTTONDOWN;

procedure TForm1.WMNCLBUTTONDOWN(var msg: TMessage);
begin
if msg.wParam = HTCAPTION then Caption := "Left Click!";
inherited;
end;


 
azl ©   (2007-01-14 21:47) [7]

Класс. Спасибо огромное. Вы настоящий мастер.


 
azl ©   (2007-01-14 21:54) [8]

FAskerQ, А как определить если щелчек был произведен по кнопке на панели задач?


 
FAskerQ ©   (2007-01-14 22:14) [9]


> azl ©   (14.01.07 21:54) [8]


Мне бы кто сказал... сам не знаю


 
ors_archangel ©   (2007-01-14 22:19) [10]


> FAskerQ, А как определить если щелчек был произведен по
> кнопке на панели задач?

По кнопке, или всё-таки по иконке трее? Извини, чё-то не догоняю сегодня


 
azl ©   (2007-01-14 22:43) [11]

По кнопке.
По иконке в трее можно отдельно прописать событие OnClick.


 
azl ©   (2007-01-14 22:51) [12]

FAskerQ
Делаю то же самое для правой кнопки мыши:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if  msg.wParam = VR_RBUTTON then
  Caption:= "Вы щелкнули по приложению (программе или как еще назвать)";
end;


Все вроде бы хорошо, только вот если подвожу курсок к заголовку Caption сразу присваивается "Вы щелкнули по приложению (программе или как еще назвать)" до щелчка.
Почему так?


 
ors_archangel ©   (2007-01-15 00:04) [13]


> Почему так?

Потому что нет фильтра сообщений, я думаю, попробуй:

 case Msg.message of
 WM_LBUTTONUP: caption := "Left click!";
 WM_RBUTTONUP: caption := "Right click!";
 end;


 
ors_archangel ©   (2007-01-15 00:09) [14]

Насчёт клика по кнопке приложения:

 case Msg.message of
 WM_LBUTTONUP: caption := "Left click!";
 WM_RBUTTONUP: caption := "Right click!";
 WM_SYSCOMMAND:
   if msg.wParam = SC_RESTORE then caption := "Button click!";
 end;

SC_RESTORE - восстановление


 
Palladin ©   (2007-01-15 01:09) [15]


> [14] ors_archangel ©

ну по поводу sc_restore не обязательно что именно по кнопке, + тогда еще нужно корректно обработать OnActivate и OnMinimize...
для решения в общем случае можно повешать хук на мышь и покопаться в недрах системы для извлечения позиции кнопки приложения на панели задач... может извлечение этой информации и просто делается, я не знаю, не сталкивался...


 
ors_archangel ©   (2007-01-15 01:48) [16]


> ну по поводу sc_restore не обязательно что именно по кнопке,
>  + тогда еще нужно корректно обработать OnActivate и OnMinimize.

Начсёт "не обязательно" такой код может помочь, но у меня какие-то глюки, не знаю от этого кода или вообще :)))

function CursorInWorkarea: boolean;
var
 workarea: TRect;
 cursor: TPoint;
begin
 SystemParametersInfo(SPI_GETWORKAREA, 0, @workarea, 0);
 GetCursorPos(cursor);
 result := PtInRect(workarea,cursor);
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
 case Msg.message of
 WM_LBUTTONUP: caption := "Left click!";
 WM_RBUTTONUP: caption := "Right click!";
 WM_SYSCOMMAND:
   if (msg.wParam and $FFF0 = SC_RESTORE) and (hiword(msg.lParam)<>-1)
   and not CursorInWorkarea then
     caption := "Button click!";
 end;
end;

Насчёт "корректно" не понял :(  handled по умолчанию = false - следовательно AppEvents только фильтрует сообщения, никому не мешает вроде как!


 
ors_archangel ©   (2007-01-15 01:54) [17]

Насчёт "немешания" начинаю сомневаться: через TaskMgr сворачиваю, разворачиваю - пропадает всё, кроме Project1 и, собственно, TaskMgr, что бы это значило? (И форма как ещё по краям экрана свой Frame рисует задисабленным, вообще, чёрная магия!)


 
azl ©   (2007-01-15 12:20) [18]

Спасибо огромное, все работает.
Только не пойму в чем отличие [16] от [14]. Работает и тот и тот вариант.

По поводу [17]. Есть такой глюк. Хотя я никогда не сворачивал и не восстанавливал через TaskBar.


 
ors_archangel ©   (2007-01-15 15:19) [19]


> azl ©   (15.01.07 12:20) [18]

Ну [17] должен провреять, что мышка находится на панели задач (тут вообще-то проверяется, что мышь не в work area - нужно тестировать при AutoHide панели задач, неизвестно что будет! Про lParam<>-1 в справке написано, что в случае lParam=-1 восстановление не мышкой было произведено... Вообще, что-то глючное получается :(((


 
azl ©   (2007-01-15 15:45) [20]

Понял. Спасибо большое.



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

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

Наверх




Память: 0.52 MB
Время: 0.047 c
2-1169314081
FIL-23
2007-01-20 20:28
2007.02.04
как перевести символ в двоичный код и обратно?


15-1168765710
&amp;#65207;&amp;#65204;
2007-01-14 12:08
2007.02.04
Тест - Как постить в журнал (6)?


6-1157144470
Орион
2006-09-02 01:01
2007.02.04
Прокси для TWebBrowser


3-1163190542
Zurius
2006-11-10 23:29
2007.02.04
Ошибка приложения, технология ADO, Access


15-1168813182
Юрий Зотов
2007-01-15 01:19
2007.02.04
Сабля