Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

Перекрыть CustomDrawItem в TreeView   Найти похожие ветки 

 
Islander   (2004-04-07 23:20) [0]

Здравствуйте!

Разрабатываю компонент-наследник от TTreeView. Стоит задача - раскрашивать ноды в разные цвета.
И тут встала проблема: не могу перекрыть событие OnCustomDrawItem. Полазив по наследникам нашел функцию

   function CustomDrawItem(Node: TTreeNode; State: TCustomDrawState;
     Stage: TCustomDrawStage; var PaintImages: Boolean): Boolean; override;

Нормально ее перекрыл и скомпилировал. Только есть проблема: она не выполняется. Ставлю брейку - заходов в эту функцию нет.

Никто не может подсказать, как это лечить?


 
Camypau   (2004-04-07 23:33) [1]

не совсем понял конечно.
можно было просто это событие обработать и раскрасить или даже не его а onAdvancedCustomDraw
и (не помню это только в листвью или тут то же есть) свойство OwnerDraw в тру установить
без него ты туда не попадёшь в энтот кодец


 
Islander   (2004-04-07 23:39) [2]

1) В TreeView можно OwnerDraw не включать
2) Обработать можно, но не красиво. Я же компоненту пишу и расраска нод должна быть именно в ней.


 
Camypau   (2004-04-07 23:50) [3]

понял.
но всё же по моему надо перекрывать не событие, а процедуру отрисовки
поищи код if assigned(CustomDrawItem)
по моему (я всё ж не уверен) customdraw дополнительная процедура отрисовки, а не основная  и она не производит основную отрисовку, а работает только когда нужно дополнительно отрисовать что то, если у компонента конечно задана процедура обработчик

если что не так, извини :)


 
Islander   (2004-04-07 23:55) [4]

Так я и перекрываю функцию отрисовки...


 
Игорь Шевченко ©   (2004-04-08 00:25) [5]

procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var Rect : TRect;
begin
 with Sender.Canvas do begin
   if cdsHot in State then
     Font.Style := Font.Style + [fsUnderline]
   else
     Font.Style := Font.Style - [fsUnderline];
   if ([cdsHot, cdsSelected] * State <> []) then begin
     Font.Color := clBlack;
     if cdsHot in State then begin
       Brush.Color := RGB(100,200,255);
     end else begin
       Brush.Color := clWhite;
     end;
   end else begin
     if cdsSelected in State then
       Font.Color := clBlack
     else
       Font.Color := clBlack;
     Brush.Color := clWhite;
   end;
   Rect := Node.DisplayRect(true);
   Rect.Right := Sender.BoundsRect.Right;
   FillRect (Rect);
 end;
end;


Вроде, нормально работает....


 
Islander   (2004-04-08 00:30) [6]

Спасибо, но это не то.

Мне нужно такую прорисовку осуществить В КЛАССЕ-НАСЛЕДНИКЕ TTREEVIEW...


 
Camypau   (2004-04-08 00:44) [7]

короче ща попробовал такой класс создать и...
не работало как у тя ,
но после того как создал обработчик oncustomdrawitem у дерева класса наследника, то метод вызвался (причём процедура пустая).
значить наверно надо смотреть выше в обработчике
CNNotify где он и вызывается потом CustomDrawitem в смысле.
наверно он там проверяет есть ли обработчики отрисовки или нет
и в зависимости от этого вызывает или не вызывает customdrawitem


 
Islander   (2004-04-08 01:12) [8]

Да, точно, вот теперь функция сработала... Но все равно, ставить даже пустой обработчик - нецивильно. Где бы еще напильничком попилить? :) Можно ли как то сделать Assigned OnCustomDrawItem из компоненты-наследника?


 
Mantic0re ©   (2004-04-08 10:37) [9]

Писал компоненту, наследник от TCustomTreeView, где не только цвет но и сами ноды перерисовывал капитально (компонент схож с делфийским ObjectInspector"ом)..
Сначала тоже заморачивался с CN_NOTIFY..
Но потом просто в конструкторе присвоил OnAdvancedCustomDrawItem свой обработчик,
и рисовал в Stage = cdPrePaint, с DefaultDraw = False.
Все работает ок.



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

Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.033 c
8-1074489491
Disruptor
2004-01-19 08:18
2004.04.25
Ролловер


3-1080732484
Lam
2004-03-31 15:28
2004.04.25
Вычитание таблиц


14-1080578383
Тимохов
2004-03-29 20:39
2004.04.25
предложение


1-1081200929
TALLA
2004-04-06 01:35
2004.04.25
Не могу передать строку в DLL на VC++6


11-1065452668
Fligt
2003-10-06 19:04
2004.04.25
В Delphi 7 выдает ошибку "File not found: Exptlntf.dcu "





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский