Сейчас на форуме: asfa, _MBK_, Rio (+6 невидимых)

 eXeL@B —› Вопросы новичков —› APi PopupMenu
Посл.ответ Сообщение

Ранг: 8.0 (гость)
Активность: 0.020
Статус: Участник

Создано: 20 февраля 2009 18:56
· Личное сообщение · #1

Проблема: вызываю попменю (окно в трее), меню норм отображается, обрабатываю все клики в меню, но... меню не исчезает, если клик был на другом окне, или вне области меню. т.е. оно видно, пока на нем не нажмешь на какой нибудь пункт.

Var
P : TPoint;
I, I2, I3 : Integer;
GWnd : HWnd;
Buffer : Array [0..127] Of Char;
TempWinStr : Array [0..127] Of String;
PAC : PAnsiChar;
Begin
MenuClear;
I := 0;
GWnd := GetWindow(Wnd, gw_HWndFirst);
For I2 := 0 To GWnd do
Begin
IF (GWnd <> Wnd) AND //ñîïñíà îêíî
(IsWindowVisible(GWnd)) AND //âñå âèäèìûå
(GetWindow(GWnd, gw_Owner) = 0) AND //íå äî÷åðíèå
(GetWindowText(GWnd, Buffer, sizeof(Buffer)) <> 0) AND //áåç çàãîëîâêà
(Buffer <> 'Program Manager')THEN //åñëè íå ìåíåäæåð çàäà÷
BEGIN
GetWindowText(GWnd, Buffer, sizeof(Buffer));
CreateMenuItem (Menu, 0, Buffer, 0, I + 100, false, False);
Inc (I);
END;
GWnd := GetWindow(GWnd, gw_hWndNext);
END;

I3 := 0;
For I2 := 0 To 127 Do
If WinStr [I2] <> '' Then
Begin
PAC := PChar (WinStr [I2]);
GWnd := FindWindow (Nil, PAC);
If (GWnd <> 0) And
Not (IsWindowVisible(GWnd)) Then
Begin
TempWinStr [I3] := WinStr [I2];
Inc (I3);
End;
End
Else
Break;

For I2 := 0 To 127 Do
Begin
WinStr [I2] := TempWinStr [I2];
If TempWinStr [I2] = '' Then
Break;
CreateMenuItem (Menu, 0, PChar (WinStr [I2]), 0, I + 100, false, True);
Inc (I);
TempWinStr [I2] := '';
End;

CreateMenuItem (Menu, 0, '', 0, 99, True, False);
CreateMenuItem (Menu, 0, 'Âûõîä', 0, 500, false, False);
GetCursorPos (P);
// DrawMenuBar (Menu);
TrackPopUpMenu (Menu, TPM_LEFTALIGN, P.X, P.Y, 0, WND, Nil);


Function CreateMenuItem (Menu, SubMenu : HMenu; Cap : PAnsiChar; _Uid,
_Wid : Uint; Sep, Checked : Boolean) : Boolean;
Var
MII : MenuItemInfo;
Begin
MII.cbSize := SizeOf (MII); //âûäåëÿåì ïàìÿòü
MII.fMask := //MIIM_FTYPE or MIIM_STATE or MIIM_STRING;

Miim_State Or
Miim_Type Or
//Miim_SubMenu Or //ñóáìåíþ
Miim_ID; //ócòàíàâëèâàåì ÈÄ
If Not Sep Then //Åñëè íå íàäà ñåïàðàòîð, òî
MII.fType := MFT_String // ïîêàçûâàåì ïðîñòî ñòðîêó
Else
MII.fType := MFT_Separator; //çíà÷èòü ðàçäåëèòåëü
If Checked Then
MII.fState := MFS_Enabled or MFS_CHECKED //ìåíþ âêëþ÷åíî
Else
MII.fState := MFS_Enabled;
MII.wID := _Wid; //èä ìåíþ
MII.hSubMenu := SubMenu;
MII.dwItemData := 0;
MII.dwTypeData := Cap; //còðîêà ìåíþ
MII.cch := SizeOf (Cap);//ïàìÿòü äëÿ íàçâàíèÿ
InsertMenuItem (Menu, _Uid, False, MII);
End;

Menu := CreatePopUpMenu; //Ñîçäàåì ìåíþ
//çàïîëíÿåì ñòðóêòóðó TWndClassEx äëÿ ìåíþ************************************
TWCE.cbSize := SizeOf (TWCE); //îïðåäåëÿåì ðàçìåð äëÿ ñòðóêòóðû
TWCE.style := CS_HREDRAW or //ïåðåðèñîâûâàòü ïðè ãîðèçîíòàëüíîì èçìåíåíèè ðàçìåðà îêíà
CS_VREDRAW or //ïðè âåðòèêàëüíîì
CS_DBLCLKS; //îáðàáîòàêà äâîéíîãî êëèêà, ë.êëèêà è ï.êëèêà
TWCE.lpfnWndProc := @WindowProc; //óêàçàòåëü íà îêîííóþ ôóíêó
TWCE.cbClsExtra := 0; //äîï áàéòû íå íàäà
TWCE.cbWndExtra := 0; //äîï áàéòû íå íàäà
TWCE.hInstance := HInstance; //ïðîã ìîäóëü
TWCE.hbrBackground := Color_Window; //çàëèâêà
TWCE.lpszMenuName := @Menu; //èìÿ ìåíþ
TWCE.lpszClassName := WndClass; //
TWCE.hIcon := LoadIcon (0, IDI_Application);//èêîíêà, íàõ?
TWCE.hCursor := LoadCursor (0, IDc_Arrow); //êóðñîð
RegisterClassEx (TWCE); //ðåãèñòðèðóåì êëàññ
//******************************************************************** ********


 eXeL@B —› Вопросы новичков —› APi PopupMenu
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати