Rozważmy następujący bardzo proste urządzenie:Jak mogę przywrócić widok drzewa, czy potrzebny jest poziomy pasek przewijania?
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
Dodaj to do VCL Forms aplikację i uruchomić. Wynik wygląda tak:
chciałbym do poziomego paska przewijania, aby nie być wyświetlane. Jak mogę to osiągnąć?
Teraz zdaję sobie sprawę, że mogę usunąć linię kodu, która przypisuje bardzo długi ciąg. Ale jest to uproszczony program na potrzeby mojego pytania. W the real app the text of the nodes is changing i chcę, aby paski przewijania pokazywały, czy są potrzebne i nie pokazują, czy nie są potrzebne.
Wiem o stylu TVS_NOHSCROLL
, ale nie mogę tego użyć. Czasami widok drzewa zawiera tekst, który jest szerszy niż dostępna przestrzeń. A czasami nie.
Chcę również użyć TTreeView
i nie chcę używać widoku drzewa wirtualnego. Nie chodzi o to, że mam coś przeciwko wirtualnemu widokowi drzewa, tylko że moja aplikacja używa obecnie TTreeView
.
Dzięki. Poprostu praca. To 'WM_SETREDRAW (1, 0)' w 'EndUpdate', który wykonuje pracę. Nie do końca wiem, dlaczego ma to wpływ. –
Relavent Raymond Chen: [Istnieje domyślna implementacja WM_SETREDRAW, ale możesz być w stanie zrobić to lepiej] (http://blogs.msdn.com/b/oldnewthing/archive/2011/01/24/10119211.aspx) –