Delphi: показать назначенный кадр узлу дерева - PullRequest
0 голосов
/ 05 июля 2011

У меня нет опыта работы с кадрами.

Как использовать Tree View с фреймами? Мне нужно переключиться между узлами в виде дерева и показать назначенный кадр выбранному узлу.

Большое большое спасибо за помощь !!!

1 Ответ

2 голосов
/ 05 июля 2011

На самом деле не имеет значения, если Data узлов содержит указатель на фрейм или любой другой тип объекта, тип указывает указатель на тип объекта, который он содержит.

Ниже код добавляет два фрейма ('Frame2' и 'Frame3', созданные в среде IDE - очень похоже на новую форму) в качестве узлов 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;
...