4

Delphi 2009のレイヤードウィンドウとシステムメニューに問題があります。つまり、レイヤードウィンドウ(境界線がない)にはシステムメニューがありません。システムメニューとは、アプリケーションのアイコンをクリックするか、タイトルバーを右クリックするか、(Windows 7ではShiftキーを追加して)タスクバーのアプリケーションを右クリックしたときに表示されるメニューを指します。 :

コントロールメニュー

このようなレイヤードウィンドウのタスクバーアイコンを右クリックするなどしてシステムメニューにアクセスしようとすると、代わりにレイヤードウィンドウが表示されます。どうしてこれなの?設定するスタイルや、処理するイベントはありますか?

これは、問題を示す急いで作成されたデモです。ただし、bsNoneボーダースタイルを使用すると、どのような形式でも実際に再現できます。

http://ompldr.org/vODd5dw

4

1 に答える 1

13

ボーダースタイル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;
于 2011-04-11T21:07:01.717 に答える