Форум: "Основная";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
ВнизРазноцветный 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c