Подтвердить что ты не робот

Как я могу заставить древовидную структуру переосмыслить, нужна ли горизонтальная полоса прокрутки?

Рассмотрим следующую очень простую единицу:

Unit1.pas

unit Unit1;

interface

uses
  Windows, Classes, Controls, Forms, ComCtrls;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  SLongString = 'blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah';

procedure TForm1.FormCreate(Sender: TObject);
var
  Node: TTreeNode;
begin
  TreeView1.Width := 200;
  Node := TreeView1.Items.Add(nil, SLongString);
  Node.Text := 'blah';
end;

end.

Unit1.dfm

object Form1: TForm1
  ClientHeight = 137
  ClientWidth = 216
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object TreeView1: TTreeView
    Left = 8
    Top = 8
    Width = 198
    Height = 121
  end
end

Добавьте это в приложение VCL Forms и запустите. Результат выглядит следующим образом:

enter image description here

Я бы хотел, чтобы горизонтальная полоса прокрутки не показывалась. Как я могу достичь этого?

Теперь я понимаю, что я могу удалить строку кода, которая назначает очень длинную строку. Но это сводная программа для моего вопроса. В реальном приложении меняется текст узлов, и я хочу, чтобы полосы прокрутки отображались, если они необходимы, и не показывают, если они не нужны.

Я знаю об TVS_NOHSCROLL, но я не могу это использовать. Иногда древовидное представление содержит текст, который шире, чем доступное пространство. И иногда нет.

Я также хочу использовать TTreeView и не хочу использовать виртуальное древовидное представление. Не то, чтобы у меня было что-то против виртуального древовидного представления, просто в моем приложении в настоящее время используется TTreeView.

4b9b3361

Ответ 1

Очень просто, используйте методы TreeView1.Items.BeginUpdate/EndUpdate, и полоса прокрутки будет рассчитана соответствующим образом.

вот так:

...
 TreeView1.Items.BeginUpdate;
 // change your nodes here
 TreeView1.Items.EndUpdate