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

Вниз

Где грабли?   Найти похожие ветки 

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

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

Наверх




Память: 0.48 MB
Время: 0.046 c
2-1138868039
alexus
2006-02-02 11:13
2006.02.19
передать команду другому приложению


8-1122035208
Wm.DIGGER
2005-07-22 16:26
2006.02.19
Как узнать название кодека по его тэгу :)


2-1138611240
Pit
2006-01-30 11:54
2006.02.19
Handle модуля процесса


3-1135523459
turonix
2005-12-25 18:10
2006.02.19
Проблемы при создании ограничения на поле типа Date в Access


8-1126270480
Nick Denry
2005-09-09 16:54
2006.02.19
Можно ли средсвами TMediaPLayer