Форум: "Основная";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
ВнизСтранности в TreeView Найти похожие ветки
← →
yahaha © (2007-08-22 18:06) [0]Задача: сделать "ручную" отрисовку TreeView
(в данном примере устанавливается разный цвет фона в зависимости от Node.Index)procedure TForm1.tv_1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
r1,r2:TRect;
cx,cy:integer;
Node1:TTreeNode;
begin
DefaultDraw:=false; r1:=Node.DisplayRect(True);
//Фон
if Node.Index mod 2 = 0
then tv_1.Canvas.Brush.Color:=RGB(250,250,0)
else tv_1.Canvas.Brush.Color:=RGB(250,0,0);
if cdsSelected in State then tv_1.Canvas.Brush.Color:=RGB(0,0,255);
tv_1.Canvas.FillRect(r1);
//Текст
if (Node.Index mod 2 = 1)
then tv_1.Canvas.Font.Color:=RGB(255,255,255)
else tv_1.Canvas.Font.Color:=RGB(0,0,0);
tv_1.Canvas.TextOut(r1.Left+1,r1.Top+1,Node.Text);
//Левая часть
cx:=r1.Left - tv_1.Indent div 2;
cy:=r1.Top + (r1.Bottom - r1.Top) div 2;
tv_1.Canvas.Pen.Color:=RGB(0,0,0);
//Линия квадрат-надпись гориз.
tv_1.Canvas.MoveTo(cx+5,cy); tv_1.Canvas.LineTo(cx+9,cy);
//Линия квадрат-предок вертик.
if (Node.Parent<>nil) or (Node.GetPrevSibling<>nil) then begin
tv_1.Canvas.MoveTo(cx,cy-8); tv_1.Canvas.LineTo(cx,cy-5);
end;
//Линия квадрат-след.одноуровнеый
if (Node.GetNextSibling <> nil) then begin
tv_1.Canvas.MoveTo(cx,cy+5); tv_1.Canvas.LineTo(cx,cy+8);
end;
//Квардрат и плюс/минус
if Node.HasChildren then begin
tv_1.Canvas.MoveTo(cx-5,cy-5); tv_1.Canvas.LineTo(cx-5,cy-5);
tv_1.Canvas.LineTo(cx-5,cy+5); tv_1.Canvas.LineTo(cx+5,cy+5);
tv_1.Canvas.LineTo(cx+5,cy-5); tv_1.Canvas.LineTo(cx-5,cy-5);
tv_1.Canvas.MoveTo(cx-2,cy); tv_1.Canvas.LineTo(cx+3,cy);
if not Node.Expanded then begin
tv_1.Canvas.MoveTo(cx,cy-2); tv_1.Canvas.LineTo(cx,cy+3);
end;
end else begin
tv_1.Canvas.Brush.Color:=RGB(255,255,255);
tv_1.Canvas.Ellipse(cx-5,cy-5,cx+5,cy+5);
end;
//Верт.линии для предков
Node1:=Node.Parent;
while Node1<>nil do begin
cx:=cx-tv_1.Indent;
if Node1.GetNextSibling<>nil then begin
tv_1.Canvas.MoveTo(cx,r1.Top); tv_1.Canvas.LineTo(cx,r1.Bottom);
end;
Node1:=Node1.Parent;
end;
end;
Всё отлично, то только почему-то внутри "кружка" фон делается цветным! Почему?
Ведь я ему по-русски говорю, будь добр - сделай фон БЕЛЫМ:tv_1.Canvas.Brush.Color:=RGB(255,255,255);
tv_1.Canvas.Ellipse(cx-5,cy-5,cx+5,cy+5);
← →
TStas © (2007-08-25 04:48) [1]А кисточку солидный ты сделал (tv_1.Canvas.Brush.Style := bsSolid)?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.068 c