![]() |
|
|
#1
|
|||
|
|||
|
Доброе время суток. Помню как то ранее задавался вопрос о системном меню. Предлагалось вызвать сообщение $313 но ничего не работает. Я имею в виду popup menu возникающее в заголовке окна при щелчке на иконку.
|
|
#2
|
||||
|
||||
|
Вот пожалста..при нажатии на Button1 системное меню вылетит в координатах (100х100)
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
LItem : LongWord;
LMenu : HMENU;
begin
LMenu := GetSystemMenu(Handle,false);
LItem := LongWord(Windows.TrackPopupMenu(LMenu, TPM_LEFTBUTTON or
TPM_RIGHTBUTTON or TPM_RETURNCMD,
100, 100, 0 , Handle, nil));
if LItem>0 then SendMessage(Handle,WM_SYSCOMMAND,LItem,0);
end; |
|
#3
|
|||
|
|||
|
Что то не работает. Lmenu равен нулю. И никакого меню не появляется. Для справки у меня виста и д6.
|
|
#4
|
||||
|
||||
|
У меня работает.
D7 Win-7 |
|
#5
|
|||
|
|||
|
И что мне делать
|
|
#6
|
||||
|
||||
|
У меня прекрасно работает. D6+XP
Так что даже не скажу...Кстати, я не зря кинул ссылку на автора...почитайте обсуждение к этому решению, может что-нибудь вычитаете для себя. Там же предложено такое решение: SendMessage(Handle, 787, 0, MAKELPARAM(10, 10)); Сам не пробовал еще... Последний раз редактировалось dr. F.I.N., 01.05.2010 в 09:15. |
|
#7
|
|||
|
|||
|
Что-то ничего не получается.
Код:
var
LItem : LongWord;
LMenu : HMENU;
begin
LMenu := GetSystemMenu(Handle,false);
LItem := LongWord(Windows.TrackPopupMenu(LMenu, TPM_LEFTBUTTON or
TPM_RIGHTBUTTON or TPM_RETURNCMD,
100, 100, 0 , Handle, nil));
if LItem>0 then SendMessage(Handle,WM_SYSCOMMAND,LItem,0);
end;Сообщение SendMessage(Handle, 787, 0, MAKELPARAM(10, 10)); ничего не происходит. Кстати посетила идея может не работает меню из-за того что у меня на форме BorderStyle:= bsNone? |
|
#8
|
|||
|
|||
|
Проблему решил!!!! Спасибо всем за помощь. Оказывается если BorderStyle = bsNone, то форма этого меню не создает. Предлагаю свое решение если интересно.
Код:
...
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style:= Params.Style or WS_SYSMENU;
end;
...
var lItem: LongWord;
lMenu: HMenu;
...
lMenu:= GetSystemMenu(Handle, false);
lItem:= LongWord(Windows.TrackPopupMenu(lMenu, TPM_LEFTBUTTON or TPM_RIGHTBUTTON,
10, 10, 0, Handle, nil));
if lItem > 0 then SendMessage(Handle, WM_SYSCOMMAND, lItem, 0);
... |