Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Treeview (разноцветные части пунктов)

74K
11 октября 2011 года
sam-music
4 / / 05.10.2011
Подскажите как возможно реализовать разноцветные пункты в дереве?

вот пример реализации жирного элемента. как не пытался не получается сделать цветным (

желательно бы еще сделать в 1 пункте - разного цвета слова.

Код:
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;
14
11 октября 2011 года
Phodopus
3.3K / / 19.06.2008
Воспользуйтесь компонентом VirtualTreeView
Вообще и у стандартного тоже должно быть можно, но лень искать
19K
12 октября 2011 года
Alegun
269 / / 10.09.2010
При попытке изменения цвета фонта во второй раз (первый - по дефолту), этих изменений не будет, возможно в борланде перемудрили что-то в кэше ресурсов GDI (класс TCanvas). Попробуйте использовать функции API, такие как SetTextColor, SelectObject etc., передавая им в качестве первого параметра Canvas.Handle.
74K
13 октября 2011 года
sam-music
4 / / 05.10.2011
подобный метод красит нужный пункт с нужным текстом в определенный цвет. но как быть если Some мне нужно покрасит в красный а Text в зеленый?

 
Код:
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;


в принципе можно перерисовывать через 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;


так ни кто не реализовывал разного цвета слова в пункте?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог