Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы с модальными окнами и системным меню в Delphi

Delphi , Программа и Интерфейс , Модальные формы

В 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Модальные формы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-23 12:28:48/0.0036089420318604/0