2011-07-04 35 views

回答

2

如果節點持有指向幀或任何其他類型對象的指針,則它沒有真正的區別,可以指向指向它所持有的對象類型的指針。

下面的代碼將兩個框架(由IDE創建的'Frame2'和'Frame3' - 非常像一個新窗體)添加爲TreeView的節點,並將選定節點的框架的可見性設置爲true,並取消選中一個人要虛假。

type 
    TForm1 = class(TForm) 
    TreeView1: TTreeView; 
    procedure FormCreate(Sender: TObject); 
    procedure TreeView1Change(Sender: TObject; Node: TTreeNode); 
    procedure TreeView1Changing(Sender: TObject; Node: TTreeNode; 
     var AllowChange: Boolean); 
    procedure FormDestroy(Sender: TObject); 
    end; 

var 
    Form1: TForm1; 

implementation 

uses Unit2, Unit3; 

{$R *.dfm} 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    TreeView1.Align := alLeft; 

    with TFrame(TreeView1.Items.AddObject(nil, 'Frame2', TFrame2.Create(nil)).Data) do begin 
    Visible := False; 
    Parent := Self; 
    Align := alClient; 
    end; 

    with TFrame(TreeView1.Items.AddObject(nil, 'Frame3', TFrame3.Create(nil)).Data) do begin 
    Visible := False; 
    Parent := Self; 
    Align := alClient; 
    end; 
end; 

procedure TForm1.FormDestroy(Sender: TObject); 
var 
    i: Integer; 
begin 
    for i := 0 to TreeView1.Items.Count - 1 do 
    TFrame(TreeView1.Items[i].Data).Free; 
end; 


procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode); 
begin 
    TFrame(Node.Data).Visible := True; 
end; 

procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode; 
    var AllowChange: Boolean); 
begin 
    if Assigned((Sender as TTreeView).Selected) then 
    TFrame(TTreeView(Sender).Selected.Data).Visible := False; 
end; 
+0

好。爲什麼我會在Nods之間切換這樣的錯誤:第一次機會例外情況是$ 766EB727。異常類EAccessViolation'模塊'Project1.exe'中地址爲0049515B的消息'訪問衝突。讀取地址00000059'。 Process Project1.exe(3636)??? – maxfax

+0

這不好:) – maxfax

+0

+1,代碼完美。 @maxfax,如果它不適合你,請更具體地說明失敗。你是否複製粘貼代碼,或者是否適應了你的情況?你在哪裏得到訪問違規? –