Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Click по приложению [D2005, 2000]


azl ©   (2007-01-14 17:38:00) 

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

Спасибо.


azl   (2007-01-15 15:45:00) [1]

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


ors_archangel   (2007-01-15 15:19:00) [2]


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

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


azl   (2007-01-15 12:20:00) [3]

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

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


ors_archangel   (2007-01-15 01:54:00) [4]

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


ors_archangel   (2007-01-15 01:48:00) [5]


> ну по поводу 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 только фильтрует сообщения, никому не мешает вроде как!


Palladin   (2007-01-15 01:09:00) [6]


> [14] ors_archangel ©

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


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

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

  caseMsg.message of
 WM_LBUTTONUP: caption := 'Left click!';
 WM_RBUTTONUP: caption := 'Right click!';
 WM_SYSCOMMAND:
    ifmsg.wParam = SC_RESTORE thencaption := 'Button click!';
  end;

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


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


> Почему так?

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

  caseMsg.message of
 WM_LBUTTONUP: caption := 'Left click!';
 WM_RBUTTONUP: caption := 'Right click!';
  end;


azl   (2007-01-14 22:51:00) [9]

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

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


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


azl   (2007-01-14 22:43:00) [10]

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


ors_archangel   (2007-01-14 22:19:00) [11]


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

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


FAskerQ   (2007-01-14 22:14:00) [12]


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


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


azl   (2007-01-14 21:54:00) [13]

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


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

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


FAskerQ   (2007-01-14 21:36:00) [15]

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

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;


FAskerQ   (2007-01-14 21:35:00) [16]

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;


azl   (2007-01-14 21:02:00) [17]

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


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

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

Кидаете на форму 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 20:18:00) [19]

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

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

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


Desdechado   (2007-01-14 18:53:00) [20]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо