Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
1-1102086014
Vega
2004-12-03 18:00
2004.12.19
отображение HTM


8-1095948856
Гость
2004-09-23 18:14
2004.12.19
GDI+ Проблема кодировок.


1-1101636516
Piter
2004-11-28 13:08
2004.12.19
Работа с классами в DLL


14-1101895272
АлексейК
2004-12-01 13:01
2004.12.19
Win2003Server


4-1099759400
volser
2004-11-06 19:43
2004.12.19
Цвет фона рабочего стола





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