Форум: "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