Автор: 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; |
- Назад
- Вперёд >>
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!