Разноцветный текст в TVirtualStringTree: примеры и советы на Delphi и C++ BuilderDelphi , Синтаксис , ДеревьяTVirtualStringTree - это удобный и мощный компонент для отображения больших объемов данных в виде древовидной структуры. Одним из его преимуществ является возможность настройки внешнего вида узлов, в том числе цвета и стиля шрифта. В этой статье мы рассмотрим, как добиться различного цвета текста в одном узле TVirtualStringTree на примере Delphi и C++ Builder. ПроблемаРазработчик хочет создать вид в TVirtualStringTree, подобный приведенному на рисунке: В приведенном примере у узла "FolderA" жирный текст, а затем красный текст без жирного шрифта сразу за ним в том же узле. Разработчик ищет способ получить такой результат. Однако, если это слишком сложно или проблематично, разработчик будет доволен результатом в стиле "FolderB" или "FolderC" - который, скорее всего, можно сделать с помощью 2 столбцов, один из которых содержит название папки, а другой - количество файлов внутри. "FolderD" приведен в качестве примера папки без файлов, и вывод для этой папки (текст без жирного шрифта и без номера). Разработчик ищет направления, как добиться результата в стиле "FolderA", "FolderB" или "FolderC", так как, по его мнению, TVirtualStringTree может иметь только один цвет или стиль жирного шрифта для одного узла. Любые советы или примеры кода на Delphi или C++ Builder будут очень кстати ( конечный код будет на C++ Builder). РешениеОдним из решений является использование опции ```pascal implementation type PNodeRec = ^TNodeRec; TNodeRec = record Name: WideString; Count: Integer; IsBold: Boolean; end; procedure TForm1.FormCreate(Sender: TObject); var Node: PVirtualNode; NodeRec: PNodeRec; I: Integer; begin VirtualStringTree1.TreeOptions.StringOptions := VirtualStringTree1.TreeOptions.StringOptions + [toShowStaticText]; VirtualStringTree1.NodeDataSize := Sizeof(TNodeRec); // Добавляем данные for I := 1 to 10 do begin Node := VirtualStringTree1.AddChild(nil); NodeRec := VirtualStringTree1.GetNodeData(Node); Initialize(NodeRec^); NodeRec.Name := 'Node' + IntToStr(I); NodeRec.Count := I; NodeRec.IsBold := I mod 2 = 0; end; end; procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var NodeRec: PNodeRec; begin NodeRec := PNodeRec(TVirtualStringTree(Sender).GetNodeData(Node)); if TextType = ttNormal then CellText := NodeRec^.Name else // ttStatic CellText := Format('(%d)', [NodeRec^.Count]); end; procedure TForm1.VirtualStringTree1PaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType); var NodeRec: PNodeRec; begin NodeRec := PNodeRec(TVirtualStringTree(Sender).GetNodeData(Node)); if TextType = ttNormal then begin if NodeRec^.IsBold then TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold]; end else // ttStatic TargetCanvas.Font.Color := clRed; end; Вывод: Примечания Это было слишком просто! Разработчик попробовал это и получил отличный результат, спасибо миллион! Единственная небольшая проблема сейчас в том, что статическая часть немного слишком правая (как один лишний пробел или так). Можно ли отрегулировать левое поле Я не знаю о встроенной функции, подобной этой (но я также использую довольно старую версию VT). Вы можете обработать отрисовку в событии У вас есть свойство Для настройки Пользователь хочет отобразить текст разных цветов в узлах TVirtualStringTree в Delphi и C++ Builder. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |