给treeview加上背景

一般来说给treeview加个背景还是比较不容易的,我曾经按照网上的一些方法但是老是不成功。
前一段时间无意中看到了一段代码,是c#的,现在把它改成delphi下面的。代码比较乱
源码/Files/youkebing/app.rar
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    f:tFORM;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  oldRichWnProc: TFarProc;
  bFirst: Boolean=True;
  //zt : THANDLE;
implementation

{$R *.dfm}

procedure cl(bitMap: TBitmap) ;
var
r:tRect;
begin
r.left:= 0;
r.Top:=0;
r.Right:= bitmap.Width;
          r.Bottom:= bitmap.Height;
  bitmap.Canvas.Brush.Bitmap := form1.Image1.Picture.Bitmap;
  bitmap.Canvas.FillRect(r);
  //BitBlt(bitmap.Canvas.Handle,0,0,bitmap.Width,bitmap.Height,form1.Image1.picture.bitmap.Canvas.Handle,0,0,SRCCOPY);
end;

function newRichWnProc(hWin:HWnd;uMsg:UINT;wPrm:WParam;lPrm:LParam):Longint;stdcall;
var
  dc,yc: HDC;
  cvs: TCanvas;
  //nFstLine,nLineCount,nLineStart: integer;
  //pt: TPoint;
  rect,r :TRect;
  //i : integer;
  w,h : integer;
  BitMap: TBitmap;
begin
  case uMsg of
    WM_ERASEBKGND:
      begin
        result:= 0;
        exit;
      end;
    WM_PAINT :
      begin
        if(GetUpdateRect(hWin,rect,false)) then
        begin
          cvs:=TCanvas.Create;
          cvs.Lock();
          dc:=GetDc(hWin);
          //yc := getdc(zt);
          //cvs.Handle := yc;
         
          GetClientRect(hWin,r);
          w := r.Right-r.Left;
          h := r.Bottom-r.Top;
          r.Left:= 0;
          r.Top:= 0;
          r.Right:= w;
          r.Bottom:= h;
          bitmap := TBitmap.Create;
          bitmap.Width := w;
          bitmap.Height := h;
          cl(bitmap);
          sendmessage(hWin,WM_PRINTCLIENT,dc,0);
          BitBlt(bitmap.Canvas.Handle,0,0,w,h,dc,0,0,SRCAND);
          (BitBlt(dc,0,0,w,h,bitmap.Canvas.Handle,0,0,SRCCOPY));
          ValidateRect(hWin, @rect);
          cvs.Unlock;
          cvs.Free;
          ReleaseDC(hWin,dc);
          result:= 0;
          exit;
        end;
      end;
  end;
  result:=CallWindowProc(oldRichWnProc,hWin,uMsg,wPrm,lPrm);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  oldRichWnProc:=TFarProc(SetWindowLong(self.TreeView1.Handle,GWL_WNDPROC,Integer(@newRichWnProc)));
end;

end.

 

 

posted @ 2007-01-16 13:24  尤克斌  阅读(427)  评论(0编辑  收藏  举报