TVirtualStringTree использует довольно другой набор процедур для рисования ячеек дерева. Если вы посмотрите в справке, вы обнаружите, что для каждой ячейки происходит несколько событий. Вероятно, вас интересуют:
OnBeforeCellPaint
OnPaintText
OnDrawText
OnBeforeCellPaint()
предоставляет параметр CellRect
, который можно использовать для заливки всего фона, включая символ расширения дерева и изображение конечного узла, или, используяContentRect
, исключая дерево, расширяющее пространство символов,
procedure TForm1.VSTBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
, а затем используйте OnPaintText()
для рисования текста
procedure TForm1.VSTPaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType);
В качестве альтернативы, возможно, проще использовать только OnDrawText()
, в которомВы можете заполнить текстовый фон (но, за исключением дерева, развернуть символ и изображение) и нарисовать текст
procedure TForm1.VSTDrawText(Sender: TBaseVirtualTree; TargetCanvas: TCanvas;
Node: PVirtualNode; Column: TColumnIndex; const Text: string;
const CellRect: TRect; var DefaultDraw: Boolean);
Кстати, я рекомендую взглянуть на файл справки в пакете dl, чтобы получить более подробную информацию о рисованиидерево. Глава Рисование циклов и этапов начинается с этого: Самым сложным процессом в Virtual Treeview, без сомнения, является его рисование. Прочтите здесь, какие этапы вступает в Virtual Treeview во время рисования и как вы можете настроить этот процесс.