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

Вниз

Перекрыть 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
6-1077124527
Kerch
2004-02-18 20:15
2004.04.25
форма на WinInet


14-1080628902
Gorlum
2004-03-30 10:41
2004.04.25
Про отсрочку


3-1080151731
Doctor Deejay
2004-03-24 21:08
2004.04.25
Фильтрация


3-1080283711
Drozdov A
2004-03-26 09:48
2004.04.25
Tstrings


14-1080701475
Думкин
2004-03-31 06:51
2004.04.25
С днем рождения! 31 марта.