向表单添加边框图标

Tim*_*Tim 5 windows delphi titlebar delphi-2007 custom-titlebar

使用Delphi我想在边框图标按钮上添加另一个按钮; 关闭,最大化,最小化.关于如何做到这一点的任何想法?

And*_*and 5

这在Windows Aero之前很容易做到.您只需不得不听WM_NCPAINTWM_NCACTIVATE消息借鉴标题栏的顶部,同样可以使用其他的WM_NC*消息,以响应鼠标点击等,特别是WM_NCHITTEST,WM_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.
Run Code Online (Sandbox Code Playgroud)

现在,这不适用于启用Aero.不过,有一种方法可以利用标题栏; 我已经这样做了,但它要复杂得多.有关工作示例,请参阅此文章.