Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как связать TTreeView и TPageControl?

01.01.2007

На форме стоит TreeView, PageControl и кнопка.

При смене страницы - меняется текущий узел, а при смене узла меняется страница.

unit Unit1;

interface
 
uses
 
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 
StdCtrls, ComCtrls;
 
type
  TForm1
= class(TForm)
    TreeView1
: TTreeView;
    Button1
: TButton;
    PageControl1
: TPageControl;
    procedure Button1Click
(Sender: TObject);
    procedure TreeView1Change
(Sender: TObject; Node: TTreeNode);
    procedure PageControl1Change
(Sender: TObject);
 
private
    procedure addItem
(t: String);
   
{ Private declarations }
 
public
   
{ Public declarations }
 
end;
 
var
  Form1
: TForm1;
 
implementation
 
{$R *.DFM}
 
Procedure TForm1.addItem(t:String);
 
var TabSheet:TTabSheet;
     
Node:TTreenode;
begin
 
TabSheet:=TTabSheet.Create(Self);
 
TabSheet.PageControl:=PageControl1;
 
TabSheet.caption:=t;
 
Node:=TreeView1.Items.Add(nil, t);
 
Node.data:=TabSheet; //ассоциируем узел с страницей
 
TabSheet.tag:=Integer(Node); // ассоциируем страницу с узлом
 
end;
 
procedure TForm1
.Button1Click(Sender: TObject);
begin
  TreeView1
.HideSelection:=false;
  addItem
('Item1');
  addItem
('Item2');
  addItem
('Item3');
  addItem
('Item4');
end;
 
procedure TForm1
.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  PageControl1
.ActivePage:=TTabSheet(Node.data);// Доступ к ассоциированной странице через узел
end;
 
procedure TForm1
.PageControl1Change(Sender: TObject);
begin
  TreeView1
.Selected:=TTreeNode(Pointer(PageControl1.ActivePage.tag));// Доступ к ассоциированному узлу через страницу
end;
 
end.

Автор: Vit

Взято с Vingrad.ru https://forum.vingrad.ru