我知道呢,告诉你们
  不过还有些问题,就是子树那里不是透明的,怎么解决?
var
  Form1: TForm1;
  bitmap: TBitmap;implementation{$R *.dfm}procedure TForm1.TreeView1CustomDraw(Sender: TCustomTreeView;
  const ARect: TRect; var DefaultDraw: Boolean);
var
  x,y,w,h : LongInt;
begin
  with Bitmap do
  begin
    W := Width;
    H := Height;
  end;
  Y := 0;
  while Y < Height do begin
  X := 0;
  while X < Width do
  begin
    TreeView1.Canvas.Draw(X, Y, Bitmap);
    Inc(X, W);
  end;
  Inc(Y, H);
  end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Bitmap := TBitmap.Create;
  Bitmap.LoadFromFile('radio.bmp');
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Bitmap.Free;
end;end.

解决方案 »

  1.   

    我想应该可以使用TreeView的Canvas属性,比如:
    TCanvas.Brush.Bitmap.LoadFromFile(Filename)
      

  2.   

    可以参考Delphi自带的demo中的CustomDraw,里面有Treeview 加一个背景图片例子。
      

  3.   

    将image中得图片显示在treeview中:
    treeview1.Canvas.Draw(treeview1.left,treeview1.Top,image1.Picture.Graphic);
      

  4.   

    Delphi自带的demo中的CustomDraw不行
    它写得很清楚,exp or col就不对了
    除非每次exp col都repaint--没试过  dreamertang 兄,做出来一定告诉我啊![email protected]
      

  5.   

    我改了一下,但还是有闪烁,闪的好厉害!我也想问别人呢!该怎么解决那位兄弟看看
      private
        FButtonSize: Integer;
        FDefaultDraw,
        FDefaultDrawItem: Boolean;
        FBackgroundColor: TColor;
        FBrushStyle: TBrushStyle;
        procedure DrawButton(ARect: TRect; Node: TTreeNode);
        procedure DrawImage(NodeRect: TRect; ImageIndex: Integer);
    //    procedure SetCustomDraw(Value: Boolean);
        { Private declarations }
      public
        { Public declarations }
      end;var
      CustomDrawForm: TCustomDrawForm;//{$R backdrop.Res}implementation{$R *.dfm}
    procedure TCustomDrawForm.FormCreate(Sender: TObject);
    begin
      FBackgroundColor := clWindow;
      FDefaultDraw := True;
      FDefaultDrawItem := False;
      FBrushStyle := bsSolid;
      FButtonSize := 6;
      Panel1.DoubleBuffered := True;
      CustomDrawForm.DoubleBuffered := True;
    end;procedure TCustomDrawForm.TVCustomDraw(Sender: TCustomTreeView; const ARect: TRect;
      var DefaultDraw: Boolean);
    begin
      with TV.Canvas do
      begin
        StretchDraw(ARect, Image1.Picture.Bitmap);
      end;
      DefaultDraw := FDefaultDraw;
      //setting DefaultDraw to false here prevents all calls to OnCustomDrawItem.
    end;procedure TCustomDrawForm.DrawButton(ARect: TRect; Node: TTreeNode);
    var
      cx, cy: Integer;
    begin
      cx := ARect.Left + TV.Indent div 2;
      cy := ARect.Top + (ARect.Bottom - ARect.Top) div 2;
      with TV.Canvas do
      begin
        Pen.Color := clGreen;
        //画水平线
        if Node.HasChildren then
        begin
          PenPos := Point(cx+FButtonSize, cy);
          LineTo(ARect.Left + TV.Indent + FButtonSize, cy);
        end else
        begin
          PenPos := Point(cx, cy);
          LineTo(ARect.Left + TV.Indent + FButtonSize, cy);
        end;    //画顶部的垂直线
        PenPos := Point(cx, cy);
        LineTo(cx, ARect.Top-1);    if ((Node.GetNextVisible <> nil) and (Node.GetNextVisible.Level = Node.Level))
        or (Node.GetNextSibling <> nil) then
        //画底部的垂直线
        begin
          PenPos := Point(cx, cy);
          LineTo(cx, ARect.Bottom+1);
        end;    if Node.HasChildren then
        begin
          //画圆
          RoundRect(cx-FButtonSize, cy-FButtonSize, cx+FButtonSize, cy+FButtonSize,8,8);      //画指示线
          PenPos := Point(cx-FButtonSize+2, cy);
          LineTo(cx+FButtonSize-2, cy);
          //draw the vertical indicator if the node is collapsed
          if not Node.Expanded then
          begin
            PenPos := Point(cx, cy-FButtonSize+2);
            LineTo(cx, cy+FButtonSize-2);
          end;
        end;
            //画连接时的垂直线
        Node := Node.Parent;
        while Node <> nil do
        begin
          cx := cx - TV.Indent;
          if Node.GetNextSibling <> nil then
          begin
            PenPos := Point(cx, ARect.Top);
            LineTo(cx, ARect.Bottom);
          end;
          Node := Node.Parent;
        end;
      end;
    end;procedure TCustomDrawForm.DrawImage(NodeRect: TRect; ImageIndex: Integer);
    var
      cy: Integer;
    begin
      cy := NodeRect.Top + (NodeRect.Bottom - NodeRect.Top) div 2;
      //center image in NodeRect.
      ImageList.Draw(TV.Canvas, NodeRect.Left, cy - TV.Images.Height div 2,
                     ImageIndex, True);
    end;procedure TCustomDrawForm.TVCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode;
      State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      NodeRect: TRect;
    begin
      with TV.Canvas do
      begin
        DefaultDraw := FDefaultDrawItem;
        if not DefaultDraw then
        begin
         //draw the selection rect.
          if cdsSelected in State then
          begin
            NodeRect := Node.DisplayRect(True);
            FillRect(NodeRect);
          end;
          NodeRect := Node.DisplayRect(False);
          Brush.Style := bsClear;      NodeRect.Left := NodeRect.Left + (Node.Level * TV.Indent);
          //NodeRect.Left now represents the left-most portion of the expand button
          DrawButton(NodeRect, Node);      NodeRect.Left := NodeRect.Left + TV.Indent + FButtonSize;
          //NodeRect.Left is now the leftmost portion of the image.
          DrawImage(NodeRect, Node.ImageIndex);      NodeRect.Left := NodeRect.Left + ImageList.Width;
          //Now we are finally in a position to draw the text.      TextOut(NodeRect.Left, NodeRect.Top, Node.Text);
        end;
      end;
    end;procedure TCustomDrawForm.Exit1Click(Sender: TObject);
    begin
      Close;
    end;procedure TCustomDrawForm.OnCustomDrawItem1Click(Sender: TObject);
    begin
      TV.Repaint;
    end;procedure TCustomDrawForm.TVExpanded(Sender: TObject; Node: TTreeNode);
    begin
      TV.Repaint;
    end;
    end.