В Delphi, при добавлении элементов в системное меню форм с помощью функции AppendMenu, могут возникать проблемы, если форма открывается в модальном режиме. В этом случае кастомные пункты меню не отображаются. Это происходит, когда свойство ModalPopupMode установлено в значение pmAuto.
Причина этого заключается в том, что в модальном режиме форма создается и уничтожается несколько раз в течение своего жизненного цикла. Каждый раз, когда форма создается, ее системное меню также создается заново, что приводит к потере кастомных пунктов меню.
Чтобы решить эту проблему, не следует добавлять кастомные пункты меню в конструкторе формы или в событии OnCreate. Вместо этого, переопределите метод CreateWnd формы и поместите там свой код AppendMenu. Метод CreateWnd вызывается после создания окна формы, и он вызывается каждый раз, когда форма создает свое окно, так что вы можете увидеть, что он вызывается несколько раз для одной и той же формы.
Пример кода на Object Pascal (Delphi):
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure WMDestroy(var Msg: TMsg); message WM_DESTROY;
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
// Не добавляйте код AppendMenu здесь
end;
procedure TForm2.WMDestroy(var Msg: TMsg);
begin
// Удалите кастомные пункты меню здесь, чтобы они не оставались после уничтожения формы
inherited;
end;
procedure TForm2.CreateWnd;
begin
inherited CreateWnd;
// Добавьте кастомные пункты меню здесь
AppendMenu(GetSystemMenu(Handle, False), MF_BYPOSITION, 10000, PChar('Test'));
end;
end.
В этом примере, кастомные пункты меню добавляются в методе CreateWnd, а удаляются в методе WMDestroy, чтобы они не оставались после уничтожения формы.
Использование этого подхода гарантирует, что кастомные пункты меню будут добавлены в системное меню формы, независимо от того, открывается ли форма в модальном или моделильном режиме, и независимо от значения свойства ModalPopupMode.
В данном контексте рассматривается проблема с отображением кастомных пунктов меню в системном меню форм в Delphi, когда форма открывается в модальном режиме. Причина заключается в том, что форма создается и уничтожается несколько раз в течение своего жизн
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS