Главная страница
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.021 c
15-1191667488
Denis_
2007-10-06 14:44
2007.11.11
Можно ли узнать, чем откомпилина прграмма?


2-1192616783
Nikola32
2007-10-17 14:26
2007.11.11
ListBox - AddItem - TObject


11-1170771683
Psychedelic
2007-02-06 17:21
2007.11.11
Исправления в KOLComboBoxEx и KOLSATab


15-1191930668
Nucer
2007-10-09 15:51
2007.11.11
Как правильно писать программы?


15-1191796932
Альберт Мобайл
2007-10-08 02:42
2007.11.11
посоветуйте