[Delphi4]TreeView

Pagina: 1
Acties:

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 12:29
Ik ben bezig met een programma te maken in delphi waar een TreeView in gebruikt wordt.
In die TreeView moet het mogelijk zijn om in runtime, door op een knop te drukken, nodes toe te voegen.
Dit lukt wel, echter ik wil dus dat deze laatst aangemaakte node automatisch wordt geselecteerd. Dit omdat de node met een standaard naamgeving wordt aangemaakt en die moet dus gelijk gewijzigd kunnen worden.
Hoe doe ik dat?
Ik heb al met GetLastChild zitten spelen, maar dat werkt niet en ik kom er maar niet uit.
TreeView ziet er zo ongeveer uit:
code:
1
2
3
4
5
6
7
8
9
Hoofdnode 
|_Subnode (1)
|  |_Subnode (2)
|  |_Subnode (4)
|
|_Subnode (3)
|_Subnode (5)

etc.


Ook heb ik nog wat met AbsoluteIndex zitten spelen, maar die veranderd dus steeds! Als ik ze in bovenstaande volgorde aanmaak dan worden de index nummers als volgt:

code:
1
2
3
4
5
6
7
8
9
Hoofdnode 
|_Subnode (1)
|  |_Subnode (2)
|  |_Subnode (3)
|
|_Subnode (4)
|_Subnode (5)

etc.



Hellup! ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:05
Kijk eens in de help naar de member-functions van een TTreeNode object.

Daar heb je imho een procedure MakeVisible...
code:
1
NewNode.MakeVisible (false)

https://fgheysels.github.io/


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 12:29
Ja, maar dat bedoel ik dus niet.
Ik bedoel dat de nieuwe node geselecteerd wordt en dat het label in "wijzig modus" komt te staan.


Was trouwens de buttonclick procedure vergeten:

code:
1
2
3
4
procedure TForm1.BtnNewClick(Sender: TObject);
begin
SiteTree.Items.AddChild(SiteTree.Selected.Parent,'New Site').makevisible;
end;


En dan moet dus die nieuw aangemaakte Child direct geslecteerd worden en het label in "wijzig modus" gezet worden.

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:05
code:
1
2
3
TreeView.SelectedNode := NewNode;
NewNode.MakeVisible(false);
.. en dan de code om hem in 'wijzig-modus' te zetten....


Ik heb Delphi hier nu niet staan, maar heb je geen 'State' property oid?
Misschien lukt het wel als je gewoon de OnDubbelClick event oid van die node triggered?

https://fgheysels.github.io/


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Te laat.

Never underestimate the power of


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

function TTreeNode.EditText: Boolean;

Description

Call EditText to allow the user to edit the node’s label. This method implicitly sets the Selected and Focused properties to True. When EditText is called, the tree view's OnEditing event is triggered.

We adore chaos because we like to restore order - M.C. Escher


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 12:29
Aha!
Kijk die moest ik hebben!
Misschien het methoden overzicht wat beter moeten bekijken :)
Bedankt!

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:05


Daarom hoef je je reply niet te verwijderen hoor....

Dit vind ik jammer, aangezien er toch enkele interessante vermeldingen in stonden;
Zoals: dat als FallenAngel op die manier een node toevoegt, hij nooit een verwijzing heeft naar die andere node enzo

https://fgheysels.github.io/


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 12:29
Ik heb dus nog nooit met een TreeView gewerkt.
Nu ga ik dus even zoeken hoe je anders een Node kan toevoegen.
Dat is vast wel ergens te vinden, en anders zie je me hier wel terug :)

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 12:29
whoami schreef op 01 oktober 2002 @ 16:44:

[...]


Daarom hoef je je reply niet te verwijderen hoor....

Dit vind ik jammer, aangezien er toch enkele interessante vermeldingen in stonden;
Zoals: dat als FallenAngel op die manier een node toevoegt, hij nooit een verwijzing heeft naar die andere node enzo
Inderdaad, als hij die post niet had gemaakt zat ik morgen rond deze tijd nog te kloten :D

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
whoami schreef op 01 oktober 2002 @ 16:44:

[...]


Daarom hoef je je reply niet te verwijderen hoor....

Dit vind ik jammer, aangezien er toch enkele interessante vermeldingen in stonden;
Zoals: dat als FallenAngel op die manier een node toevoegt, hij nooit een verwijzing heeft naar die andere node enzo
Sorry, ik zal het in het vervolg niet meer doen. :)

Never underestimate the power of


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 12:29
Heb iets in elkaar geprogseld wat werkt:

code:
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
var newnode:TTreeNode;
begin
newnode := TreeView1.Items.AddChild((TreeView1.Selected),'Bla');
newnode.makevisible;
newnode.EditText;
end;



Nog iets over het hoofd gezien of kan het nog anders (lees: beter ;))?
Iig bedankt voor de hulp!


Edit: Moet er nog gecontroleerd worden of er een node geselecteerd is trouwens?

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
FallenAngel666 schreef op 01 oktober 2002 @ 17:26:
Edit: Moet er nog gecontroleerd worden of er een node geselecteerd is trouwens?
Een node heeft toch een property "Selected" die je (eventuel voor de zekerheid) op true kunt zetten?

Never underestimate the power of


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 12:29
Je bedoeld dat als er geen node geselecteerd wordt dat er dan altijd een soort default node is (de hoogste in de tree bijv.) waar de node die ingevoegd dient te worden dan onder komt te hangen?
Of begrijp ik je verkeerd?

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:05
FallenAngel666 schreef op 01 oktober 2002 @ 18:07:
Je bedoeld dat als er geen node geselecteerd wordt dat er dan altijd een soort default node is (de hoogste in de tree bijv.) waar de node die ingevoegd dient te worden dan onder komt te hangen?
Of begrijp ik je verkeerd?


Neen, (again, Delphi is niet geinstalleerd hier op m'n werk).
Een TTreeView heeft waarschijnlijk een property Selected. Die property is van het type TTreeNode en geeft aan welke node er geselecteerd is:

code:
1
MyTreeView.Selected := NewNode;


(Als dit niet het geval is, dan zal de class TTreeNode wel een boolean property Selected hebben waarmee je kunt aangeven of een TTreeNode geselecteerd is of niet. Gewoon ff in de help kijken.

https://fgheysels.github.io/


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 31-08 19:41

Creepy

Tactical Espionage Splatterer

Als je een addchild doet aan een node die niet bestaat (= nil) dan wordt de node toegevoegd als zijnde een "main" node.

Als je dus een .addchild(treeview.selected,'blaat') doet, en in de treeview is niks geselecteerd (treeview.selected is dan nil) dan krijg je dus een extra main node.

Overigens staat de werking van .addchild er mooi uitgelegd in de Help van Delphi. (ja.. ook in D4)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 12:29
Kijk dat moest ik dus weten.
Dus controle op of iets wel of niet geselecteerd staat als je addchild gebruikt is niet nodig.
Pagina: 1