TTreeView/fi
│
English (en) │
español (es) │
suomi (fi) │
français (fr) │
magyar (hu) │
русский (ru) │
Puunäkymä
TTreeView eli puunäkymä on on graafinen ohjauselementti, joka esittää hierarkkisen näkymän informaatiosta. Jokaisella kohteella voi olla useita alakohteita.
Kohteet voidaan laajentaa paljastamaan alakohteita, jos niitä on olemassa ja piilottamaan sen alle kuuluvat kohteet.
Uuden kohteen lisääminen koodilla
Käytä TTreeView.Items.AddChild tai AddChildObject.
Puunäkymän luominen joka lataa kohteita vain laajentamisen yhteydessä
Jos halutaan lisätä laajennussymboli solmuun, jossa ei ole osia, käytä:
MyNode.HasChildren := True;
Aseta sitten tapahtumakäsittelijä OnExpanding-tapahtumaan. Tässäkin sinun pitäisi palata, jos laajennus todella voidaan tehdä tai ei, ja jos kyllä, niin pitäisi lisätä alikohtia solmuun. Jos laajennusta ei voida tehdä, laajennusmerkki poistuu automaattisesti, vaikka olet aiemmin asettanut HasChildrenin todeksi.
Lyhyt esimerkki puunäkymän käyttämisestä
Tässä on nopeasti tehty esimerkki:
Luodaan uusi sovellus. Laitetaan lomakkeelle TTreeview-komponentti. Lisätään vielä pari painiketta (TButton). Muutetaan Button1:n Caption-ominaisuus arvoon "Add Child" ja button2:n Caption-ominaisuus arvoon "Delete".
Liitetään seuraava koodi näiden painikkeiden OnClick-tapahtumiin, käännetään ja ajetaan ohjelma.
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
s: string;
begin
// if there are no nodes, create a root node with a parent of nil
if TreeView1.Items.Count = 0 then
begin
Treeview1.Items.Add (nil,'Root Node');
exit;
end;
// Set up a simple text for each new node - Node1 , Node2 etc
i := treeview1.Items.Count;
s := 'Node ' + inttostr(i);
//Add a new node to the currently selected node
if TreeView1.Selected <> nil then
Treeview1.Items.AddChild(Treeview1.Selected ,s);
end;
procedure TForm1.Button2Click(Sender: TObject);
//A procedure to recursively delete nodes
procedure DeleteNode(Node:TTreeNode);
begin
while Node.HasChildren do
DeleteNode(node.GetLastChild);
TreeView1.Items.Delete(Node) ;
end;
begin
if TreeView1.Selected = nil then
exit;
//if selected node has child nodes, first ask for confirmation
if treeview1.Selected.HasChildren then
if messagedlg( 'Delete node and all children ?',mtConfirmation, [mbYes,mbNo],0 ) <> mrYes then
exit;
DeleteNode(TreeView1.Selected);
end;
Ohjelman ajon alussa puunäkymä on tyhjä. Jos valitaan "Lisää lapsi" ("Add Child"-painike), luodaan juurisolmu. Sen jälkeen lapsi lisätään mihin tahansa valitulle solmulle klikkaamalla painiketta "Lisää lapsi".
"Delete" (poista) painike poistaa valitun solmun. Jos sillä ei ole lapsia, se poistaa sen välittömästi, mutta jos sillä on lapsia, se kysyy ensin.
Esimerkki usean solmun valinnasta useille käyttäjävalinnoille
Valitaan TTreeview-komponentti, siirrytään komponenttimuokkaimeen ja asetetaan options ominaisuus "tvoAllowMultiSelect" arvoon true. Sitten toistetaan valittujen solmujen päälle ja hankitaan valittujen kansioiden tai tiedostojen polut, seuraava esimerkki täyttää kyseisten valittujen solmujen tekstipolut muistikentille
Koodi:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
if TreeView1.SelectionCount=0 then
exit;
Memo1.Lines.Clear;
for i:=0 to TreeView1.SelectionCount-1 do
Memo1.Lines.Add(TreeView1.Selections[i].GetTextPath);
end;
Puunäkymän datan vapautus
Käyteään puunäkymän OnDeletion -tapahtumaa vapauttaamaan objektit.
procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
TMyObject(Node.Data).Free;
end;
Vedä ja pudota menetelmän käyttö puunäkymässä
Jos halutaan sallia "vedä ja pudota"-menetelmä, niin on
- Asetetaan ominaisuus "DragMode" arvoon DmAutomatic.
- Luodaan tapahtuma "OndragOver":
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := true;
end;
Katso myös