procedure TForm1.SetNodeState(node :TTreeNode; Flags: Integer);
var
tvi: TTVItem;
begin
FillChar(tvi, Sizeof(tvi), 0);
tvi.hItem := node.ItemID;
tvi.mask := TVIF_STATE;
tvi.stateMask := TVIS_BOLD or TVIS_CUT;
tvi.state := Flags;
TreeView_SetItem(node.Handle, tvi);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SetNodeState(htmltree.Selected, TVIS_BOLD or TVIS_CUT);
end;
Treeview (разноцветные части пунктов)
вот пример реализации жирного элемента. как не пытался не получается сделать цветным (
желательно бы еще сделать в 1 пункте - разного цвета слова.
Код:
Вообще и у стандартного тоже должно быть можно, но лень искать
При попытке изменения цвета фонта во второй раз (первый - по дефолту), этих изменений не будет, возможно в борланде перемудрили что-то в кэше ресурсов GDI (класс TCanvas). Попробуйте использовать функции API, такие как SetTextColor, SelectObject etc., передавая им в качестве первого параметра Canvas.Handle.
Код:
procedure TForm1.TreeViewCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if (Node.Text = 'Some text') then begin
with TreeView.Canvas do begin
Font.Color := clred;
end ;
end;
end;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if (Node.Text = 'Some text') then begin
with TreeView.Canvas do begin
Font.Color := clred;
end ;
end;
end;
в принципе можно перерисовывать через Canvas все. но почему-то первый раз цвет срабатывает, а второй раз - нет.
Код:
var
DisplayText : string;
NodeRect : TRect;
begin
With TTreeView(Sender).Canvas do
begin
DefaultDraw := false;
NodeRect := Node.DisplayRect(False);
FillRect(NodeRect);
Font.Color := clBlue;
DisplayText := Node.Text;
DrawText(Handle, DisplayText, Length(DisplayText), NodeRect, dt_SingleLine or dt_vcenter);
NodeRect.Left := Noderect.Left + 100;
Font.Color := clGreen;
DrawText(Handle, DisplayText, Length(DisplayText), NodeRect, dt_SingleLine or dt_vcenter);
end;
DisplayText : string;
NodeRect : TRect;
begin
With TTreeView(Sender).Canvas do
begin
DefaultDraw := false;
NodeRect := Node.DisplayRect(False);
FillRect(NodeRect);
Font.Color := clBlue;
DisplayText := Node.Text;
DrawText(Handle, DisplayText, Length(DisplayText), NodeRect, dt_SingleLine or dt_vcenter);
NodeRect.Left := Noderect.Left + 100;
Font.Color := clGreen;
DrawText(Handle, DisplayText, Length(DisplayText), NodeRect, dt_SingleLine or dt_vcenter);
end;
так ни кто не реализовывал разного цвета слова в пункте?