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

Вниз

Разноцветный Node.Text в TreeView. Может кто знает как?   Найти похожие ветки 

 
KIR ©   (2003-03-17 23:04) [0]

Народ, требуется выводить текст узла TreeView различными цветами. Одна строка раскрашена в три цвета, например:

Node.Text = "Шурупы 2 1 9";

где 2 -зеленым, 1 -синим, 9 - красным.

Это реализуемо?


 
MBo ©   (2003-03-18 06:46) [1]

OnCustomDraw***
в каталоге Demо есть пример


 
KIR ©   (2003-03-18 08:57) [2]

То что OnCustomDraw, это понятно. А в демос не тот пример. Внимательно читайте вопрос: мне надо что бы текст КАЖДОГО узла состоял из нескольких цветов. А не так что первый узел, например красный, а второй зеленый.


 
calm ©   (2003-03-18 09:09) [3]

Я тоже пробовал, не получилось :(
В демках нет разноцветных узлов.

Вот если бы кто поделился маленьким примерчиком...


 
ЮЮ ©   (2003-03-18 09:11) [4]

А кто мешает вместо одного оператора
TextOut(NodeRect.Left, NodeRect.Top, Node.Text);
Разобрать Node.Text на слова и отрисовать каждое слово в отдельности уже своим цветом?


 
Calm ©   (2003-03-18 09:36) [5]

2 ЮЮ © (18.03.03 09:11)
допустим, если различие написания только в цвете, то прокатит.
А вот если часть текста нужно нарисовать жирным, то у меня возникали проблемы.
Дело в том, что рисовать-то можно что угодно, но на мышку будет реагировать только та часть надписи, в которую попадает свойство Text.
Т.е. если Node.Text="Hello", а я отрисовываю "Hello world", то клик мышкой по слову world не выделит узел дерева :(

В чем проблема, я так и не понял :((


 
Alex44   (2003-03-18 09:52) [6]

Problema v tom, chto TTreeView (eventually) sdelano Micro$oftom. Poetomu risovat" Vy ego mozhete, kak ugodno, a schitat" razmery onovse ravnobudet po svoemu.


 
Smok_er   (2003-03-18 11:06) [7]

да че херней маяться... CustomDraw очень глючный, сам помню с этим столкнулся.
Не сторонник "левых" компонентов, но Virtual TreeView - это то, что надо!


 
REA ©   (2003-03-18 11:29) [8]

Осторожно грабли:
в непатченных версиях D5 TTreeView в CustomDraw пожирает GDI ресурсы при присвоении шрифта. Отрисовка линии нужного цвета под текстом в данном случае простейший выход из положения. К тому же читать текст легче.


 
TuMOXA   (2003-03-18 13:42) [9]

Есть такая шняга от TMS Software HTMLTree. Там можно задавать текст узла в виде ХТМЛа (там и можно задать цвета). Тока варнинг : компоненты у них глючные и тормозные, но попробовать можно. Ещё есть VirtualTreeView - вещь суперская и в исходниках (TMS тож в исхожниках если поискать:-). Разбираться с ней придётся подольше, но оно того стоит ибо оч оч оч быстрая и навороченная. Там есть событие он пайнт текст, можно обарбатывать перехватить.


 
Alexandr B.   (2003-03-18 14:46) [10]

Вот таким кодом делается разноветные строки в listview
попробуй может поможет

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if {(stage = cdPrePaint)and }(Item.Index = 2) then
ListView1.Canvas. Font.Color := clRed
else
ListView1.Canvas. Font.Color := clBlack;
end;


 
Alexandr B.   (2003-03-18 14:47) [11]

извините тоже невнимательно прочитал вопрос


 
Style   (2003-03-18 16:08) [12]

procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if(Node.Level = 0) then
TreeView1.Canvas.Font.Color := clRed
else
TreeView1.Canvas.Font.Color := clBlue;

TreeView1.Canvas.TextRect(Node.DisplayRect(true),1,1,Node.Text);
end;

Можно сделать проверку на Node.Selected! Чтобы рисовать текст цветом clHighlightText


 
Calm ©   (2003-03-18 19:17) [13]

2 Style (18.03.03 16:08)
Пробовал читать вопрос?


 
Style   (2003-03-19 07:43) [14]

Calm © >> Извеняюсь..

Хорошо напиши на MouseDown так

if( Button = mbLeft) then
begin
n := FTree.GetNodeAt(X,y);
if( n <> nil) then
begin
FTree.Selected := n;
end;
end;

И будет у тебя все выделяться


 
calm ©   (2003-03-19 09:10) [15]

2 Style (19.03.03 07:43)
Мне кажется, так не получится.
Имеется прямоугольник, который дерево считает прямоугольником, в котором отрисовывается узел. Назовем его NativeRect (NR).
И имеется прямоугольник, в котором размещается реальное изображение узла. Будем называть такой прямоугольник RealRect (RR).

Так вот проблема в том, что RealRect в общем случае не совпадает с NativeRect и превосходит NR по площади.

Так вот, если не ошибаюсь, GetNodeAt будет работать только с NativeRect, и при сильно кустомизированой отрсовке мы все равно ничего не добьемся. Юзер будет тыкать мышкой в видимый и интуитивно для него понятный RealRect, но если он при этом не попадет в NR, то дерево его проигнорирует.
IMHO так.


 
Style   (2003-03-19 09:48) [16]

calm :) А ты попробуй


 
Style   (2003-03-19 09:51) [17]

Вот посмотри как я это сделал www.sands.nm.ru/TGTView.zip


 
calm ©   (2003-03-19 10:07) [18]


> Вот посмотри как я это сделал www.sands.nm.ru/TGTView.zip

Это для D5? А нет ли для D6?


 
Style   (2003-03-19 10:11) [19]

Попробуй Поправить uses DsgnIntf на DesignIntf


 
ShuraGrp ©   (2003-03-19 10:23) [20]

А кто-нибудь ставил VirtualTreeView на D6 и W2k. Что там за зверь ThemeManager6 требуется? Подскажите пожалуйста.


 
ShuraGrp ©   (2003-03-19 11:07) [21]

Уже нашел.


 
KIR ©   (2003-03-26 09:08) [22]

Народ, а все же как раскрасить строку? Ни у кого мыслей не появилось?



Страницы: 1 вся ветка

Текущий архив: 2003.04.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
14-19858
Kolya almaty
2003-03-21 16:31
2003.04.07
про си


1-19548
multik
2003-03-26 19:00
2003.04.07
Привет всем! Проблемы с сохранением рисунка.


1-19662
Glusha
2003-03-26 02:47
2003.04.07
Поиск индекса элемента в списке TList


1-19582
Tornado
2003-03-28 13:25
2003.04.07
ДОС-команда


6-19723
HKEY_CURREN_USER
2003-02-14 14:53
2003.04.07
Cookies, Tem. Internet files, History. - Delete