Delphi を使用して、ボーダー アイコン ボタンに別のボタンを追加したいと思います。閉じる、最大化する、最小化する。これを行う方法についてのアイデアはありますか?
3025 次
3 に答える
5
これは、Windows Aero より前は簡単に実行できました。WM_NCPAINT
とのメッセージを聞いてWM_NCACTIVATE
、キャプション バーの上に描画するだけで済みます。同様に、他のWM_NC*
メッセージを使用して、マウス クリックなどに応答することもできます。特にWM_NCHITTEST
、WM_NCLBUTTONDOWN
、WM_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 に答える