Главная страница
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.019 c
3-1183366710
Игорь Шевченко
2007-07-02 12:58
2007.11.11
Кто и как передает сообщения об ошибках при работе в оракле ?


15-1192019663
ANTPro
2007-10-10 16:34
2007.11.11
У кого есть книга Ф. Юань — Программирование графики для Windows


15-1191581507
s_t_d
2007-10-05 14:51
2007.11.11
BIOS для MotherBoard VERTEX M1 94V-0


2-1192782953
apic
2007-10-19 12:35
2007.11.11
Копирование изображения


6-1173173691
inex
2007-03-06 12:34
2007.11.11
простенький сканер сети