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

Вниз

Приложение не реагирует на сообщения   Найти похожие ветки 

 
Ded Moroz ©   (2004-11-02 01:25) [0]

Доброго времени суток! Хочу поместить иконку программы в 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;

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

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


 
GuAV ©   (2004-11-02 01:37) [1]

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

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

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


 
Ded Moroz ©   (2004-11-02 01:42) [2]

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

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 02:09) [3]

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


 
GuAV ©   (2004-11-02 02:10) [4]

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


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

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

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


 
Ded Moroz ©   (2004-11-02 02:36) [5]

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

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

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


 
Ded Moroz ©   (2004-11-02 02:38) [6]

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


 
GuAV ©   (2004-11-02 02:49) [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-03 01:29) [8]

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

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-03 02:01) [9]

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 16:12) [10]

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


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

Applciation.OnMinimize ?


 
GuAV ©   (2004-11-03 19:55) [12]

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


 
Ded Moroz ©   (2004-11-04 01:31) [13]

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



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

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

Наверх




Память: 0.5 MB
Время: 0.038 c
14-1101560739
VID
2004-11-27 16:05
2004.12.19
Нужна программа для автоматической смены обоев рабочего стола


3-1100855013
Geoji
2004-11-19 12:03
2004.12.19
Выделить часть


14-1101451713
NewDelpher
2004-11-26 09:48
2004.12.19
Поиск в модуле нужной функции (процедуры) по имени


14-1101559628
Piter
2004-11-27 15:47
2004.12.19
Где взять описание структуры IMAGE_IMPORT_DESCRIPTOR ?


1-1102410677
KOSH
2004-12-07 12:11
2004.12.19
bufer