Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.11;
Скачать: CL | DM;

Вниз

Странности в 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
6-1173451478
K@KTUS
2007-03-09 17:44
2007.11.11
Компоненты FastNet


2-1192705820
koss
2007-10-18 15:10
2007.11.11
ICQ и база данных


15-1191322414
dumka
2007-10-02 14:53
2007.11.11
Юридический вопрос


15-1191328457
Prohodil Mimo
2007-10-02 16:34
2007.11.11
Delphi + Unicode на Win98, как использовать unicows.dll


2-1192589687
San1712
2007-10-17 06:54
2007.11.11
Как пользоваться функцией IsDebuggerPresent ?