Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.048 c
15-1191690459
mike-d
2007-10-06 21:07
2007.11.11
easy - с Днем рождения!


2-1192618151
sydenis
2007-10-17 14:49
2007.11.11
rasdial


4-1178464604
sinus
2007-05-06 19:16
2007.11.11
Запустить программу от имени другого пользователя


2-1192530271
неугомонный
2007-10-16 14:24
2007.11.11
печать канвы грида


11-1176476126
D[u]fa
2007-04-13 18:55
2007.11.11
Str2Extended





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский