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 во время рисования и как вы можете настроить этот процесс.
person
Tom Brunberg
schedule
04.10.2019