Содержание материала

Автор: Rustam Kafarov

 

При использовании компонента TTreeView возникают проблемы при собственной отрисовке содержимого компонента в событиях OnCustomDraw, OnCustomDrawItem, OnAdvancedCustomDraw, OnAdvancedCustomDrawItem. Проблема проявляется когда свойства Canvas компонента устанавливаются вторично. К примеру, при попытке изменить цвет фонта во второй раз, соотвествующих изменений НЕ ПОСЛЕДУЕТ. Тоже самое и со свойствами Brush, Pen.

 

Проверено на Дельфи 5.

 

Контрольный пример (на форме TTreeView и TCheckBox):

 

 

Code:

procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;

Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;

var PaintImages, DefaultDraw: Boolean);

var

ARect: TRect;

S: string;

begin

if not CheckBox1.Checked then

   Exit;

case Stage of

   cdPostPaint:

     begin

       ARect := Node.DisplayRect(True);

       ARect.Right := TreeView1.ClientWidth;

       with TreeView1.Canvas do

       begin

         if cdsSelected in State then

           Brush.Color := clHighlight

         else

           Brush.Color := clWindow;

         FillRect(ARect);

         Font.Color := clGreen;

         S := 'AbsoluteIndex : ' + IntToStr(Node.AbsoluteIndex);

         TextOut(ARect.Left, ARect.Top, S);

         // цвет шрифта должен поменяться!!!

         Font.Color := clBlue;

         // Но он не меняется :-(((

         TextOut(ARect.Left + TextWidth(S) + 20, ARect.Top, Node.Text);

       end;

     end;

end; { Case }

end;

 

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

TreeView1.Repaint;

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить