Системное меню для многоуровневых окон?
У нас возникла проблема со слоистыми окнами и системными меню в Delphi 2009. То есть наши многослойные окна (у которых нет границ) не имеют системного меню. Когда я говорю "системное меню", я имею в виду меню, которое вы получаете, нажимая на значок приложения, щелкая правой кнопкой мыши по его строке заголовка или (в Windows 7 с добавлением клавиши Shif t), щелкая правой кнопкой мыши по приложению на панели задач.:
Когда вы пытаетесь получить доступ к системному меню, например, щелкнув правой кнопкой мыши на значке панели задач, такого многослойного окна, вместо этого многослойное окно открывается. Почему это? Есть ли какой-то стиль для установки или какое-то событие для обработки?
Вот наспех сделанная демонстрация, показывающая проблему. Однако его действительно можно воспроизвести в любой форме с пограничным стилем bsNone.
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;