Системное меню для многоуровневых окон? - PullRequest
4 голосов
/ 12 апреля 2011

У нас проблема с многоуровневыми окнами и системными меню в Delphi 2009. То есть у наших многоуровневых окон (у которых нет границ) нет системного меню. Когда я говорю «системное меню», я имею в виду меню, которое вы получаете, щелкая значок приложения, щелкая правой кнопкой мыши по его строке заголовка или (в Windows 7 с добавлением клавиши Shift), щелкая правой кнопкой мыши приложение на панели задач. :

Control Menus

Когда вы пытаетесь получить доступ к системному меню, например, щелкнув правой кнопкой мыши на значке на панели задач такого многослойного окна, вместо этого многослойное окно открывается. Почему это? Есть ли какой-то стиль для установки или какое-то событие для обработки?

Вот наспех сделанная демонстрация, показывающая проблему. Однако его действительно можно воспроизвести в любой форме с пограничным стилем bsNone.

http://ompldr.org/vODd5dw

1 Ответ

13 голосов
/ 12 апреля 2011

Вам необходимо добавить обратно стиль WS_SYSMENU, который удаляется с помощью bsNone стиля рамки.

type
  TLayeredForm = class(TForm)
    procedure FormCreate(Sender: TObject);
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

...

procedure TLayeredForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or WS_SYSMENU;
end;
...