Вниз
Скачать: CL | DM;

Сообщения PopupMenu   Найти похожие ветки 

← →
i-s-v   (2004-03-31 00:22) [0]

Подскажите, плз, какое сообщение отправляет попап-меню окну при исчезновении???


← →
unya   (2004-03-31 00:41) [1]

А нафига?


← →
Игорь Шевченко ©   (2004-03-31 00:51) [2]

При выборе команды - WM_COMMAND, просто при закрытии (мышкой вне меню кликнули) - никакого


← →
nikkie ©   (2004-03-31 01:38) [3]

а как же WM_EXITMENULOOP?

WM_COMMAND, кстати, может и не посылаться (TPM_NONOTIFY)


← →
Игорь Шевченко ©   (2004-03-31 10:27) [4]

nikkie ©   (31.03.04 01:38)

Как ни странно, я перед тем, как ответить (первая мысль тоже была про WM_EXITMENULOOP) написал мелкое приложение (форму с PopupMenu) и пропустил ее через Spy++, WM_EXITMENULOOP в списке сообщений не оказалось :(

Может, я чего не так делал ?
Правда, само сообщение на форме я не ловил. Попробуешь ?


← →
nikkie ©   (2004-03-31 23:43) [5]

форма с PopupMenu - полностью VCL, я так понял? насколько мне помнится, TPopupMenu создает невидимое окно. наверное ты не на то окно смотрел.

я попробовал на программе использующей TrackPopupMenu, в которой я 100% знаю какой передается hwnd - вижу сообщения WM_ENTERMENULOOP, WM_EXITMENULOOP. отображаются они, правда, странненько (см. лог ниже). точки такие я первый раз увидел, что они обозначают не знаю. такое ощущение, что пытаются передать какой-то уровень вложенности. почему они сдвигаются - совсем непонятно. действия мои были такие:
1) открыл popup menu
2) закрыл popup menu, кликнув мимо
3) открыл popup menu
4) закрыл popup menu, кликнув кликнув по menu item
5) открыл main menu
6) закрыл main menu, кликнув мимо
7) открыл main menu
8) закрыл main menu, кликнув кликнув по menu item

<00001> 000905B0 S ........................................................................................................................ .......WM_ENTERMENULOOP fIsTrackPopupMenu:True
<00002> 000905B0 R ........................................................................................................................ .......WM_ENTERMENULOOP
<00003> 000905B0 S ........................................................................................................................ .............................WM_EXITMENULOOP fIsTrackPopupMenu:True
<00004> 000905B0 R ........................................................................................................................ .............................WM_EXITMENULOOP
<00005> 000905B0 S ........................................................................................................................ ..................................WM_ENTERMENULOOP fIsTrackPopupMenu:True
<00006> 000905B0 R ........................................................................................................................ ..................................WM_ENTERMENULOOP
<00007> 000905B0 S ........................................................................................................................ ............................................................................WM_EXITMENULOOP fIsTrackPopupMenu:True
<00008> 000905B0 R ........................................................................................................................ ............................................................................WM_EXITMENULOOP
<00009> 000905B0 P WM_COMMAND wNotifyCode:0 (sent from a menu) wID:40010
<00010> 000905B0 S ........................................................................................................................ ...........................................................................WM_ENTERMENULOOP fIsTrackPopupMenu:False
<00011> 000905B0 R ........................................................................................................................ ...........................................................................WM_ENTERMENULOOP
<00012> 000905B0 S ........................................................................................................................ ........................................................................................................................ ..........................................................................WM_EXITMENULOOP fIsTrackPopupMenu:False
<00013> 000905B0 R ........................................................................................................................ ........................................................................................................................ ..........................................................................WM_EXITMENULOOP
<00014> 000905B0 S ........................................................................................................................ ........................................................................................................................ ..........................................................................WM_ENTERMENULOOP fIsTrackPopupMenu:False
<00015> 000905B0 R ........................................................................................................................ ........................................................................................................................ ..........................................................................WM_ENTERMENULOOP
<00016> 000905B0 S ........................................................................................................................ ........................................................................................................................ ........................................................................................................................ ....WM_EXITMENULOOP fIsTrackPopupMenu:False
<00017> 000905B0 R ........................................................................................................................ ........................................................................................................................ ........................................................................................................................ ....WM_EXITMENULOOP
<00018> 000905B0 P WM_COMMAND wNotifyCode:0 (sent from a menu) wID:40005


← →
Игорь Шевченко ©   (2004-04-01 01:29) [6]

nikkie ©   (31.03.04 23:43)

Точно, спасибо за напоминание про невидимое окно. Действительно, этому окну посылается WM_EXITMENULOOP, пришлось небольшую программку написать.
unit main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Menus;

type
 TfMain = class(TForm)
   PopupMenu1: TPopupMenu;
   Item11: TMenuItem;
   N1: TMenuItem;
   Exit1: TMenuItem;
   procedure Exit1Click(Sender: TObject);
 end;

var
 fMain: TfMain;

implementation
uses
 HSHookUtils; { Для определения имени сообщения по его коду }

{$R *.dfm}

type
 THSPopupList = class(TPopupList)
 protected
   procedure WndProc(var Message: TMessage); override;
 end;

procedure TfMain.Exit1Click(Sender: TObject);
begin
 Close;
end;

{ Utility }

var
 F: TextFile;

procedure LogMessage(const Message: TMessage);
var
 FileName: string;
begin
 FileName := ChangeFileExt(Application.ExeName, ".log");
 AssignFile(F, FileName);
 if FileExists(FileName) then
   Append(F)
 else
   Rewrite(F);
 writeln(F, Format("%s (%.8x, %.8x)", [MsgName(Message.Msg),
   Message.WParam, Message.lParam]));
 CloseFile(F);
end;

{ THSPopupList }

procedure THSPopupList.WndProc(var Message: TMessage);
begin
 LogMessage(Message);
 inherited;
end;

initialization
 PopupList.Free; { Уничтожим системный экземпляр класса }
 PopupList := THSPopupList.Create; { И создадим свой PopupList, протоколирующий сообщения }
end.


И вот что в протоколе оказалось:
WM_ACTIVATEAPP (00000001, 00000260)
WM_ENTERMENULOOP (00000001, 00000000)
WM_SETCURSOR (00040188, 00000002)
WM_INITMENU (01CD01AB, 00000000)
WM_INITMENUPOPUP (01CD01AB, 00000000)
WM_ENTERIDLE (00000002, 00050194)
...
WM_ENTERIDLE (00000002, 00050194)
WM_MENUSELECT (80800001, 01CD01AB)
WM_ENTERIDLE (00000002, 00050194)
...
WM_ENTERIDLE (00000002, 00050194)
WM_CAPTURECHANGED (00000000, 00000000)
WM_UNINITMENUPOPUP (01CD01AB, 00000000)
WM_MENUSELECT (FFFF0000, 00000000)
WM_EXITMENULOOP (00000001, 00000000)
WM_COMMAND (00000001, 00000000)
WM_ENTERMENULOOP (00000001, 00000000)
WM_SETCURSOR (00040188, 00000002)
WM_INITMENU (01CD01AB, 00000000)
WM_INITMENUPOPUP (01CD01AB, 00000000)
WM_ENTERIDLE (00000002, 00060194)
...
WM_ENTERIDLE (00000002, 00060194)
WM_CAPTURECHANGED (00000000, 00000000)
WM_UNINITMENUPOPUP (01CD01AB, 00000000)
WM_MENUSELECT (FFFF0000, 00000000)
WM_EXITMENULOOP (00000001, 00000000)
WM_ENTERMENULOOP (00000001, 00000000)
WM_SETCURSOR (00040188, 00000002)
WM_INITMENU (01CD01AB, 00000000)
WM_INITMENUPOPUP (01CD01AB, 00000000)
WM_ENTERIDLE (00000002, 00070194)
...
WM_ENTERIDLE (00000002, 00070194)
WM_MENUSELECT (80800001, 01CD01AB)
WM_ENTERIDLE (00000002, 00070194)
...
WM_ENTERIDLE (00000002, 00070194)
WM_MENUSELECT (88030002, 01CD01AB)
WM_ENTERIDLE (00000002, 00070194)
...
WM_ENTERIDLE (00000002, 00070194)
WM_MENUSELECT (80800003, 01CD01AB)
WM_ENTERIDLE (00000002, 00070194)
...
WM_ENTERIDLE (00000002, 00070194)
WM_CAPTURECHANGED (00000000, 00000000)
WM_UNINITMENUPOPUP (01CD01AB, 00000000)
WM_MENUSELECT (FFFF0000, 00000000)
WM_EXITMENULOOP (00000001, 00000000)
WM_COMMAND (00000003, 00000000)
WM_ACTIVATEAPP (00000000, 00000260)
WM_DESTROY (00000000, 00000000)
WM_NCDESTROY (00000000, 00000000)


Точками отмечены повторяющиеся сообщения WM_ENTERIDLE



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.021 c
14-1082760681
Suntechnic
2004-04-24 02:51
2004.05.16
Daddy, why did we have to attack Iraq?


1-1083061715
BALU1111
2004-04-27 14:28
2004.05.16
Проблема осей или ...?


3-1082696901
WondeRu
2004-04-23 09:08
2004.05.16
Высота строк в DBGrid!


3-1082688315
ksa3003
2004-04-23 06:45
2004.05.16
Время сервера


14-1082629525
Frozzen
2004-04-22 14:25
2004.05.16
Вопросик




   Наверх