![]() |
|
#1
|
|||
|
|||
![]() Доброе время суток. Помню как то ранее задавался вопрос о системном меню. Предлагалось вызвать сообщение $313 но ничего не работает. Я имею в виду popup menu возникающее в заголовке окна при щелчке на иконку.
APPLICATION.TERMINATOR |
#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.
APPLICATION.TERMINATOR |
#4
|
||||
|
||||
![]() У меня работает.
D7 Win-7 — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
![]() И что мне делать
APPLICATION.TERMINATOR |
#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? APPLICATION.TERMINATOR |
#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); ... APPLICATION.TERMINATOR |