![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
рисование в treeview [D7, XP]
webpauk © (2007-05-10 20:26:00)Подскажите позволяет ли TtreeView отрисовывать TtreeNode разными цветами?
procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
Rect: TRect;
fI, fPos: Integer;
begin
with TTreeView(Sender).Canvas do
begin
Brush.Color:=clWindow;
if (cdsSelected in State) then
begin
Brush.Color:=clHighlight;
Font.Color:=clHighlightText;
Rect:=Node.DisplayRect(True);
FillRect(Rect);
end;
Font.Color:=clBlack;
fPos:=0;
for fI := 1 to Length(Node.text) do
begin
Font.Color:=ColorArray[fI-1];
TextOut(Rect.Left+fPos, Rect.Top, Node.Text[fI]);
fPos:=fPos+TextWidth(Node.Text[fI]);
end;
end;
end;
раскрашивает только последним цветом, а надо чтобы все буквы отличались...
Loginov Dmitry (2007-05-10 22:54:00) [1]Без промежуточного буфера действительно чесь нихотит.
Вот такое, к примеру, работает:
procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
var
Rect: TRect;
Bitmap: TBitmap;
begin
Rect := Node.DisplayRect(True);
Bitmap := TBitmap.Create;
try
Bitmap.Width := Rect.Right - Rect.Left;
Bitmap.Height := Rect.Bottom - Rect.Top;
with Bitmap.Canvas do
begin
DefaultDraw := False;
Font.Color := clGreen;
TextOut(0, 0, '111');
Font.Color := clRed;
TextOut(TextWidth('111'), 0, '222');
Sender.Canvas.Draw(Rect.Left, Rect.Top, Bitmap);
end;
finally
Bitmap.Free;
end;
end;