Системное меню для многоуровневых окон?

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

Меню управления

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

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

http://ompldr.org/vODd5dw

1 ответ

Решение

Вы должны добавить обратно 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;
Другие вопросы по тегам