Форум: "KOL";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
ВнизГде грабли? Найти похожие ветки
← →
SPeller © (2005-06-29 15:39) [0]Подскажите, где ошибка? Есть такой код:
program IEImgSwitch;
{$R trayicon.res}
uses
Windows, KOL, Messages;
var
Msg: tagMsg;
ThreadId: THandle;
ExitFlag: Boolean;
Tray: PTrayIcon;
TrayWnd: PControl;
Menu: PMenu;
OnMenu: TOnMenuItem;
procedure ShowMenu;
var
Pt: TPoint;
begin
GetCursorPos(Pt);
Menu.PopupEx(Pt.X, Pt.Y);
end;
procedure TrayMouse(Dummy: Pointer; Sender: PObj; Message: Word);
begin
case Message of
WM_LBUTTONDOWN, WM_RBUTTONDOWN:
ShowMenu;
end;
end;
procedure OnMenuHandler(Dummy: Pointer; Sender: PMenu; Item: Integer);
begin
ShowMessage("ff");
end;
begin
ExitFlag := False;
PeekMessage(Msg, 0, WM_USER, WM_USER, PM_NOREMOVE);
ThreadId := GetCurrentThreadId;
PostThreadMessage(ThreadId, WM_NULL, 0, 0);
TrayWnd := NewPanel(nil, esNone);
//TrayWnd := NewLabel(nil, "");
TrayWnd.ExStyle := WS_OVERLAPPED;
TrayWnd.Style := 0;
TrayWnd.Menu := 0;
TrayWnd.CreateWindow;
if (TrayWnd.Handle = 0) then begin
ShowMessage(SysErrorMessage(GetLastError));
end
else begin
Tray := NewTrayIcon(TrayWnd, LoadIcon(hInstance, "TRAYICON"));
Tray.OnMouse := TOnTrayIconmouse(MakeMethod(nil, @TrayMouse));
OnMenu := TOnMenuItem(MakeMethod(nil, @OnMenuHandler));
Menu :=
NewMenu(
TrayWnd, 0, ["Enable images", "Disable images", "-", "Exit"], nil);
Menu.AssignEvents(1, [OnMenu]);
Menu.AssignEvents(2, [OnMenu]);
Menu.AssignEvents(4, [OnMenu]);
repeat
WaitMessage;
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
ExitFlag := (Msg.message = WM_CLOSE);
if ExitFlag then
Break;
end;
until ExitFlag;
end;
Tray.Free;
TrayWnd.Free;
end.
Проблема в том, что не вызываются обработчики меню. Толи лыжи не едут, толи я туплю, но понять причину не могу.
← →
Thaddy (2005-06-29 16:27) [1]Maybe my rataler example will help.
← →
SPeller © (2005-06-29 16:51) [2]Thaddy (29.06.05 16:27) [1]
Щас гляну.
Ещё забыл добавить - kol 2.08
← →
SPeller © (2005-06-29 17:00) [3]Всё, разобрался, это мой глюк - нужны были строчки
TranslateMessage(Msg);
DispatchMessage(Msg);
Из очереди-то я сообщения выбираю, а отправлять окну забыл :)
← →
SPeller © (2005-06-29 17:27) [4]Написал себе простинькую утилитку для включения/отключения отображения рисунков в IE, чтобы каждый раз не лазить в настройки. Программка сидит в трее. Лучше всего ставить ее в автозагрузку. Программка для тех, кто экономит трафик :)
http://speller.narod.ru/files/other/ieimgswitch.rar (15,4 КБ exe + src)
← →
ECM © (2005-06-29 17:27) [5]..я сразу увидел..что нет обработки сообщений...
Жаль что интернет обломился на час...не успел..:)
Пара замечаний - если уж нужен супер-минимальный размер модуля то будет работать (в объеме примера) и без TranslateMessage...
а так ИМХО можно вместо:repeat
WaitMessage;
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
ExitFlag := (Msg.message = WM_CLOSE);
if ExitFlag then
Break;
end;
until ExitFlag;
использовать Run(TrayWnd) - а обработку завершения вынести в
OnMenu (OnMessage)
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c