15

次の非常に単純な単位について考えてみます。

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フォームアプリに追加して実行します。結果は次のようになります。

ここに画像の説明を入力してください

横スクロールバーを表示しないようにしたいと思います。どうすればこれを達成できますか?

これで、非常に長い文字列を割り当てるコード行を削除できることに気付きました。しかし、これは私の質問のための削減プログラムです。実際のアプリでは、ノードのテキストが変化しているので、スクロールバーに必要な場合は表示し、不要な場合は表示しないようにします。

スタイルは知っていTVS_NOHSCROLLますが使えません。ツリービューに、使用可能なスペースよりも広いテキストが含まれている場合があります。そして時々そうではありません。

またTTreeView、仮想ツリービューを使用したいのですが、使用したくありません。仮想ツリービューに対して何かがあるわけではなく、アプリが現在使用しているだけですTTreeView

4

1 に答える 1

17

非常に単純で、TreeView1.Items.BeginUpdate/EndUpdateメソッドを使用すると、それに応じてスクロールバーが計算されます。

このような:

...
 TreeView1.Items.BeginUpdate;
 // change your nodes here
 TreeView1.Items.EndUpdate
于 2012-10-02T19:24:02.523 に答える