unit Unit1;
//download by http://www.codefans.net
interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
  TForm1 = class(TForm)
  private
    procedure WMNCPaint(var Msg : TWMNCPaint); message WM_NCPAINT;
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
var
  dc : hDc;
  Pen : hPen;
  OldPen : hPen;
  OldBrush : hBrush;
begin
  inherited;
  dc := GetWindowDC(Handle);
  msg.Result := 1;  Pen := CreatePen(PS_SOLID, 3, RGB(255, 0, 0));
  OldPen := SelectObject(dc, Pen);
  OldBrush := SelectObject(dc, GetStockObject(NULL_BRUSH));
  Rectangle(dc, 0,0, Form1.Width, Form1.Height);
  SelectObject(dc, OldBrush);
  SelectObject(dc, OldPen);  DeleteObject(Pen);
  ReleaseDC(Handle, Canvas.Handle);
end;end.
上述代码delphi2010编译后在win7没有效果,求助如何实现

解决方案 »

  1.   

    在OnPaint事件中绘制一个矩形即可
      

  2.   

      我贴一下我的代码: 
    procedure TForm1.WMNCPaint(var Message: TWMNCPaint);
    begin
      DrawTitle;
      Message.Result := 1;
    end;procedure TForm1.WMNCCALCSIZE(var msg: TMessage);
    begin
      with TWMNCCALCSIZE(msg).CalcSize_Params^ do
      begin
        Inc(rgrc[0].Left, CFRAMEW);
        Inc(rgrc[0].Top, CTITLEHEIGTH);
        Dec(rgrc[0].Right, CFRAMEW);
        Dec(rgrc[0].Bottom, CFRAMEW);
      end;
      msg.Result := 0;
      inherited;
    end;procedure TForm1.DrawCaption;
    var
      CaptionBmp: TBitmap;
      DC: HDC;
      C: TCanvas;
      R: TRect;
      Style: DWORD;
    begin
      C := TCanvas.Create;
      DC := GetWindowDC(Handle);
      try
        C.Handle := DC;
        C.Brush.Color := FColor;
        C.FillRect(Rect(0, 0, Width, CTITLEHEIGTH)); //标题
        C.Brush.Color := FColor;
        C.FillRect(Rect(0, 0, CFRAMEW, Height)); //左边
        C.Brush.Color := FColor;
        C.FillRect(Rect(Width - CFRAMEW, 0, Width, Height)); //右边
        C.Brush.Color := FColor;
        C.FillRect(Rect(0, Height - CFRAMEW, Width, Height)); //底边
      finally
        C.Free;
        ReleaseDC(Handle, DC);
      end;
    end;
    你基本处理这几个消息就可以画边框了! 
      

  3.   

      DrawTitle; 修改为: DrawCaption
      

  4.   

    const 
     CFRAMEW = 2;
      CTITLEHEIGTH = 50;
      CHITTESTWIDTH = 1; //HitTest预留厚度这些是常量
      

  5.   

    procedure TFMain.DrawLine;
    var
      dc: hDc;
      Pen: hPen;
      OldPen: hPen;
      OldBrush: hBrush;
    begin
    dc := GetWindowDC(Handle);
    Self.Refresh;
    Pen := CreatePen(PS_SOLID, 1, RGB(0, 0, 200));
    OldPen := SelectObject(dc, Pen);
    OldBrush := SelectObject(dc, GetStockObject(NULL_BRUSH));
    RoundRect(dc,0,0,Width - 1,Height - 1,10,10);
    SelectObject(dc, OldBrush);
    SelectObject(dc, OldPen);
    DeleteObject(Pen);
    Pen := CreatePen(PS_SOLID, 1, RGB(137, 245, 255));
    OldPen := SelectObject(dc, Pen);
    OldBrush := SelectObject(dc, GetStockObject(NULL_BRUSH));
    RoundRect(dc,1,1,Width - 2,Height - 2,10,10);
    SelectObject(dc, OldBrush);
    SelectObject(dc, OldPen);
    DeleteObject(Pen);
    ReleaseDC(Handle, Canvas.Handle);
    end;