我知道呢,告诉你们
不过还有些问题,就是子树那里不是透明的,怎么解决?
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.
不过还有些问题,就是子树那里不是透明的,怎么解决?
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.
TCanvas.Brush.Bitmap.LoadFromFile(Filename)
treeview1.Canvas.Draw(treeview1.left,treeview1.Top,image1.Picture.Graphic);
它写得很清楚,exp or col就不对了
除非每次exp col都repaint--没试过 dreamertang 兄,做出来一定告诉我啊![email protected]
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.