5

Delphi を使用して、ボーダー アイコン ボタンに別のボタンを追加したいと思います。閉じる、最大化する、最小化する。これを行う方法についてのアイデアはありますか?

4

3 に答える 3

5

これは、Windows Aero より前は簡単に実行できました。WM_NCPAINTとのメッセージを聞いてWM_NCACTIVATE、キャプション バーの上に描画するだけで済みます。同様に、他のWM_NC*メッセージを使用して、マウス クリックなどに応答することもできます。特にWM_NCHITTESTWM_NCLBUTTONDOWNWM_NCLBUTTONUP.

たとえば、タイトル バーに文字列を描画するには、

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  protected
    procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
    procedure WMNCActivate(var Msg: TWMNCActivate); message WM_NCACTIVATE;
  private
    procedure DrawOnCaption;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.WMNCActivate(var Msg: TWMNCActivate);
begin
  inherited;
  DrawOnCaption;
end;

procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
begin
  inherited;
  DrawOnCaption;
end;

procedure TForm1.DrawOnCaption;
var
  dc: HDC;
begin
  dc := GetWindowDC(Handle);
  try
    TextOut(dc, 20, 2, 'test', 4);
  finally
    ReleaseDC(Handle, dc);
  end;
end;

end.

現在、これは Aero が有効になっていると機能しません。それでも、キャプション バーに描画する方法があります。私はそれをしましたが、それははるかに複雑です。実際の例については、この記事を参照してください。

于 2010-08-31T19:40:24.817 に答える
2

Chris Rollistonは、 Vista および Windows 7 でのカスタム タイトル バーの作成に関する詳細なブログを書きました。

彼はまた、フォローアップ記事を書き、 CodeCentralにサンプル コードを投稿しました。

于 2010-09-01T08:30:20.160 に答える
1

はい、フォームのボーダー スタイル プロパティを bsNone に設定し、すべてのボタンと好きなカスタム動作を備えた独自のタイトル バーを実装します。

于 2010-09-01T03:27:09.743 に答える