А разве тех двух процедур, приведенных выше недостаточно?.
Вот процедура отрисовки грида.
| Код | procedure TFormats.FormatGridDrawNode(Sender: TBaseVirtualTree; const PaintInfo: TVTPaintInfo); var FormatData: PFormatRec; R: TRect; begin FormatData := Sender.GetNodeData(PaintInfo.Node); with PaintInfo.Canvas do begin with Brush do begin Color := clWindow; Style := bsSolid; end; Pen.Color := $00B99D7F; end; if Sender.FocusedNode = PaintInfo.Node then begin // PaintInfo.Canvas.Font.Style := [fsBold]; GradFill(PaintInfo.Canvas.Handle, PaintInfo.CellRect, $00EAE2D9, $00D7C8B7, gkVert); end else begin // PaintInfo.Canvas.Font.Style := []; PaintInfo.Canvas.FillRect(PaintInfo.CellRect); end; PaintInfo.Canvas.Font.Style := []; PaintInfo.Canvas.Brush.Style := bsClear; PaintInfo.Canvas.Font.Color := clBlack; case PaintInfo.Column of 1: PaintInfo.Canvas.TextOut(PaintInfo.CellRect.Left + 4, PaintInfo.CellRect.Top + 2, FormatData.FieldName); 2: begin R := PaintInfo.CellRect; Windows.DrawText(PaintInfo.Canvas.Handle, pchar(FormatData.Caption), length(FormatData.Caption), R, DT_NOCLIP or DT_LEFT or DT_WORDBREAK); // PaintInfo.Canvas.TextOut(R.Left + 4, // R.Top + 2, FormatData.Caption); end; 3: PaintInfo.Canvas.TextOut(PaintInfo.CellRect.Left + 4, PaintInfo.CellRect.Top + 2, FormatData.Description); end; end;
|
В этом варианте текст, не помещающийся в ячейку, переносится на новую строку. НО высота ячейки не меняется. Хотя в свойствах VDT.TreeOptions.MiscOptions.toVariableNodeHeight у меня в true. И каждый нод получает в Node.States параметр vsMultiline. Весь вопрос состоит в том как мне динамически изменить высоту ячейки при переносе текста? Я догадываюсь, что необходимо задействовать событие OnMeasureItem. В этом событии необходимо выставить нужную высоту строки. Как мне в этом случае узнать номер столбца, который в данный момент отрисовывается?
|