Sign in Join
Wiki copytemporary

TTreeView/fi: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TTreeView/fi

OldNewLine
1+# Puunäkymä
2+
3+**TTreeView** ![](/wiki-images/a/a3/Ttreeview.png) eli puunäkymä on on graafinen ohjauselementti, joka esittää hierarkkisen näkymän informaatiosta. Jokaisella kohteella voi olla useita alakohteita.
4+
5+Kohteet voidaan laajentaa paljastamaan alakohteita, jos niitä on olemassa ja piilottamaan sen alle kuuluvat kohteet.
6+
7+## Uuden kohteen lisääminen koodilla
8+
9+Käytä TTreeView.Items.AddChild tai AddChildObject.
10+
11+## Puunäkymän luominen joka lataa kohteita vain laajentamisen yhteydessä
12+
13+Jos halutaan lisätä laajennussymboli solmuun, jossa ei ole osia, käytä:
14+
15+``` pascal
16+MyNode.HasChildren := True;
17+```
18+
19+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.
20+
21+## Lyhyt esimerkki puunäkymän käyttämisestä
22+
23+Tässä on nopeasti tehty esimerkki:
24+
25+Luodaan uusi sovellus. Laitetaan lomakkeelle TTreeview-komponentti. Lisätään vielä pari [[TButton/fi|painiketta (TButton)]]. Muutetaan Button1:n Caption-ominaisuus arvoon "Add Child" ja button2:n Caption-ominaisuus arvoon "Delete".
26+
27+Liitetään seuraava koodi näiden painikkeiden OnClick-tapahtumiin, käännetään ja ajetaan ohjelma.
28+
29+``` pascal
30+procedure TForm1.Button1Click(Sender: TObject);
31+var
32+ i: integer;
33+ s: string;
34+begin
35+ // if there are no nodes, create a root node with a parent of nil
36+ if TreeView1.Items.Count = 0 then
37+ begin
38+ Treeview1.Items.Add (nil,'Root Node');
39+ exit;
40+ end;
41+
42+ // Set up a simple text for each new node - Node1 , Node2 etc
43+ i := treeview1.Items.Count;
44+ s := 'Node ' + inttostr(i);
45+ //Add a new node to the currently selected node
46+ if TreeView1.Selected <> nil then
47+ Treeview1.Items.AddChild(Treeview1.Selected ,s);
48+end;
49+
50+procedure TForm1.Button2Click(Sender: TObject);
51+
52+ //A procedure to recursively delete nodes
53+ procedure DeleteNode(Node:TTreeNode);
54+ begin
55+ while Node.HasChildren do
56+ DeleteNode(node.GetLastChild);
57+ TreeView1.Items.Delete(Node) ;
58+ end;
59+
60+begin
61+ if TreeView1.Selected = nil then
62+ exit;
63+
64+ //if selected node has child nodes, first ask for confirmation
65+ if treeview1.Selected.HasChildren then
66+ if messagedlg( 'Delete node and all children ?',mtConfirmation, [mbYes,mbNo],0 ) <> mrYes then
67+ exit;
68+ DeleteNode(TreeView1.Selected);
69+end;
70+```
71+
72+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".
73+
74+"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.
75+
76+## Esimerkki usean solmun valinnasta useille käyttäjävalinnoille
77+
78+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
79+
80+Koodi:
81+
82+``` pascal
83+procedure TForm1.Button1Click(Sender: TObject);
84+var
85+ i: Integer;
86+begin
87+ if TreeView1.SelectionCount=0 then
88+ exit;
89+ Memo1.Lines.Clear;
90+ for i:=0 to TreeView1.SelectionCount-1 do
91+ Memo1.Lines.Add(TreeView1.Selections[i].GetTextPath);
92+end;
93+```
94+
95+## Puunäkymän datan vapautus
96+
97+Käyteään puunäkymän OnDeletion -tapahtumaa vapauttaamaan objektit.
98+
99+``` pascal
100+procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
101+begin
102+ TMyObject(Node.Data).Free;
103+end;
104+```
105+
106+## Vedä ja pudota menetelmän käyttö puunäkymässä
107+
108+Jos halutaan sallia "vedä ja pudota"-menetelmä, niin on
109+
110+1. Asetetaan ominaisuus "DragMode" arvoon DmAutomatic.
111+2. Luodaan tapahtuma "OndragOver":
112+
113+``` pascal
114+procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
115+begin
116+ Accept := true;
117+end;
118+```
119+
120+## Katso myös
121+
122+- [[doc:/lcl/comctrls/ttreeview.html|TTreeView doc]]
123+- [[TListView]]
124+
125+---
126+*From the Free Pascal wiki, page "TTreeView/fi", as it stood on 2020-03-02 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history