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

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

Приложение не реагирует на сообщения [D5, D7, Win95/98, WinME, Win2k, WinXP]


Ded Moroz ©   (2004-11-02 01:25:00) 

Доброго времени суток! Хочу поместить иконку программы в tray. Иконку добавил без проблем - добавляется, удаляется и т. д. Но когда я захотел повесить на нее Popup начались проблемы :(
Я написал процедуру, обрабатывающую сообщения:

procedure TForm1.WndProc(var Message: TMessage);
begin
   with Message do
     if Msg = WM_USER + 1 then
       case Message.lParam of
         WM_LBUTTONDBLCLK: DoDblClick;
         WM_LBUTTONUP: DoClick(mbLeft);
         WM_RBUTTONUP: DoClick(mbRight);
       end
end;

Но ничего не происходит. Никакие события, кот. проверяет процедура не происходят!
В чем я ошибся? Мож кто рабочий пример покажет?

Заранее благодарен


Ded Moroz   (2004-11-04 01:31:00) [1]

GuAV, ОГРОМНОЕ СПАСИБО! ты даже не представляешь как ты мне помог :)


GuAV   (2004-11-03 19:55:00) [2]

Да и чтобы исправить
не выполняется код менюшекпросто заместо
TrackPopupMenuEx(...) popTray.Popup(x,y);


GuAV   (2004-11-03 19:54:00) [3]

Applciation.OnMinimize ?


Ded Moroz   (2004-11-03 16:12:00) [4]

Когда форма сворачивается вниз в Taskbar мне нужно ее скрыть и для этого перехватываю сообщение WM_SIZE, а приложение - 0 эмоций...


GuAV   (2004-11-03 02:01:00) [5]

Ded Moroz ©   (03.11.04 1:29) [8]
но не выполняется код менюшек


Подозреваю что popTray - компонент TPopupMenu.
В этом случае код менюшек не выполняется потому что сообщения от менюшек адресованы не PopupList.Window, а Form1.Handle.

Ded Moroz ©   (03.11.04 1:29) [8]
Пытаюсь обрабатывать сообщение WM_SIZE на минимизацию формы (форму надо скрыть),


Не понял.


Ded Moroz   (2004-11-03 01:29:00) [6]

Ну спасибо! Выручил! :)
Извини, что надоедаю, но до сих пор не все гладко...

1. Навесил на правую кнопку открытие popup. Оно появляется,
но не выполняется код менюшек:

procedure TForm1.TaskBarIconClick(Button: TMouseButton);
var
 CP: TPoint;
...
 GetCursorPos(CP);
 if Button = mbRight then
    begin
      SetForegroundWindow(Form1.Handle);
      TrackPopupMenuEx(popTray.Handle, TPM_HORIZONTAL or TPM_LEFTALIGN,
      CP.x, CP.y, Form1.Handle, nil);
    end;

2. Пытаюсь обрабатывать сообщение WM_SIZE на минимизацию формы (форму надо скрыть), но ничего не происходит:

if Message.Msg = WM_SIZE then
  if Message.LParam = SIZE_MINIMIZED then
                      ShowWindow(frmMain.Handle, SW_HIDE);


GuAV   (2004-11-02 02:49:00) [7]

Ded Moroz ©   (02.11.04 2:38) [6]

Я делал иконку, но правда не в VCL-приложении.

Ded Moroz ©   (02.11.04 2:36) [5]
WndProc(var Message: TMessage); override;


В описании
 protected
   procedure WndProc(var Message: TMessage); override;


в реализации
procedure TForm1.WndProc(var Message: TMessage);
begin
 if Message.Msg = WM_USER + 1 then
      case Message.lParam of
        WM_LBUTTONDBLCLK: {DoDblClick};
        WM_LBUTTONUP: {DoClick(mbLeft)};
        WM_RBUTTONUP: {DoClick(mbRight)};
      end
 else inherited;
end;


Ded Moroz   (2004-11-02 02:38:00) [8]

Ты не в курсе, как это ПРАВИЛЬНО прописывается и как это ДОЛЖНО работать?


Ded Moroz   (2004-11-02 02:36:00) [9]

Объявление точно такое, как ты написал
procedure TForm1.WndProc(var Message: TMessage);

Я думал написать как в справке:
procedure TForm1.WndProc(var Message: TMessage); override;

Но это ничем не помогло. Кроме того, после этого пару раз
вылетела ошибка 'Access violation...'


GuAV   (2004-11-02 02:10:00) [10]

GuAV ©   (02.11.04 2:09) [3]
Равен ли ID WM_USER + 1 ?
равно ли hWindow Form1.Handle ?


Виноват вижу всё верно.

Покажи тогда объявление
procedure TForm1.WndProc(var Message: TMessage);

в классе формы


GuAV   (2004-11-02 02:09:00) [11]

Равен ли ID WM_USER + 1 ?
равно ли hWindow Form1.Handle ?


Ded Moroz   (2004-11-02 01:42:00) [12]

Функция создания иконки:

function TaskBarAddIcon(hWindow: THandle; ID: Cardinal;
 ICON: hicon; CallbackMessage: Cardinal; Tip: string): Boolean;
var
 NID: TNotifyIconData;
begin
 FillChar(NID, SizeOf(TNotifyIconData), 0);
 with NID do
 begin
   cbSize := SizeOf(TNotifyIconData);
   Wnd := hWindow;
   uID := ID;
   uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
   uCallbackMessage := CallbackMessage;
   hIcon := Icon;
   if Length(Tip) > 63 then
     SetLength(Tip, 63);
   StrPCopy(szTip, Tip);
 end;
 Result := Shell_NotifyIcon(NIM_ADD, @NID);
end;

Вызов:

 TaskBarAddIcon(Form1.Handle, 100, Form1.Icon.Handle, WM_USER + 1, 'Tip');


GuAV   (2004-11-02 01:37:00) [13]

Есть ли флаг procedure NIF_MESSAGE в uFlags ?

равно ли uCallbackMessage WM_USER + 1 ?

равно ли hWnd Form1.Handle ?


Наверх

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