Цитата(xvr @ 18.2.2019, 19:46) | Насколько я помню в Билдере top форма на самом деле таковой не является - он делает невидимое top окно и подвязывает формы приложения к нему как дочерние. так что ставьте SystemMenu и для Application->Handle (кажется так до него добраться можно) |
Да видимо это так, но есть особенность - если просто изменить Handle на Application->Handle, то пунктов не появится при запуске. Но они будут когда программа минимизированна. Я добавил использование обоих Handle и вроде все работает. Окончательно так:
Код | //Образец как создать пункт в системном меню окна программы void __fastcall Tblf::FormCreate(TObject *Sender) { Application->OnMessage = OnAppMessage; AppendMenu(GetSystemMenu(Handle, FALSE), MF_SEPARATOR, 0, ""); AppendMenu(GetSystemMenu(Handle, FALSE), MF_STRING, SC_MyMenuItem, "System menu item demo"); AppendMenu(GetSystemMenu(Application->Handle, FALSE), MF_SEPARATOR, 0, ""); AppendMenu(GetSystemMenu(Application->Handle, FALSE), MF_STRING, SC_MyMenuItem, "System menu item demo"); } //--------------------------------------------------------------------------- void __fastcall Tblf::OnAppMessage(tagMSG &Msg, bool& Handled) { if (Msg.message == WM_SYSCOMMAND && Msg.wParam == SC_MyMenuItem) { ShowMessage("Got the message"); Handled = true; } } //---------------------------------------------------------------------------
|
|