Entwickler-Ecke
Sonstiges (Delphi) - CheckboxTreeView
hui1991 - Mo 07.05.07 22:41
Titel: CheckboxTreeView
Hallo,
ich suche gerade für mein neues Projekt ein CheckboxTreeView, also man macht sowas wie ein TreeView blos mit CHeckbox zusammen, damit man auch ganze Bäume geselektieren kann. Ich hoffe da kennte jemand eine Komponente dafür.
Natürlich freeware ^^
In google keine Freeware gefunden und sonst hier auch nichts gefunden, vllt. war ich einfach nur blind. ^^
MfG
hui1991
Lannes - Mo 07.05.07 23:11
Hallo,
ich kenn da eine Freeware :zwinker:, die Standard-TreeView-Komponete.
Man erstellt zwei Images, gecheckt und nicht gecheckt, diese packt man in eine ImageList, die der Eigenschaft TreeView.StateImages zugewiesen wird.
Durch setzen von StateIndex werden die entsprechenden Images angezeigt.
Im Ereignis OnMouseDown schaltet man dann zwischen den Images um, wenn auf das StateImage geklickt wird.
Überprüfen ob auf das StateImage geklickt wurde und umschalten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var MyNode : TTreeNode; begin if (htOnStateIcon in TreeView1.GetHitTestInfoAt(x,y)) then begin MyNode := TreeView1.GetNodeAt(x,y); TreeView1.Items.BeginUpdate; if MyNode.StateIndex = 2 then MyNode.StateIndex := 3 else MyNode.StateIndex := 2; end; |
hui1991 - Di 08.05.07 14:39
Danke für deine Antwort,
aber gibt es auch schon eine fertige komponente? (Freeware)
Will ja das Rad nicht neu erfinden ^^
Ne, also das ist schon ein Aufwand, wenn man jetzt ein Haupt Baum hat und diesen Abwählt, müssen alle unteren auch abgewählt werden. Wenn jetzt im Baum drinnen einer Abgewählt wird, dann müssen sich die übergeordneten ändern.
Würde gerne auf etwas neues zugreifen.
Ich weis, das Faulheit nicht gern gesehen ist, aber naja ich hab auch nicht gerade viel Zeit, deswegen würde ich lieber eine Fertige komponente haben, die diese Funktion schon drin hat.
MfG
hui1991
Coder - Di 08.05.07 15:35
VirtualTreeView hat Checkboxes.
Ich glaub aber deine Spezialfunktion musst du per ChildNodes selber Programmieren.
MfG
hui1991 - Di 08.05.07 15:50
Hm.. ich glaub da gab es mal eins das genau das was ich braucht.
Das hatte denke ich auch automatisch die Ordner von Arbeitsplatz usw. auch aufgelistet.
Blos wie hieß das.
Hm..
Da ist es auch drauf:

Das links die liste da, das TreeView, sowas brauch ich ^^
MfG
hui1991
hui1991 - Do 10.05.07 07:00
Guten Morgen,
also ich habe hier mich doch dran gesetzt und die Situation überschätzt.
Naja Wenn ich etz oben drauf klicke dann werden alle Untergeordneten ab und angewählt.
Blos wenn ich weiter unten eins anschalte bekommen die Oberen kein Quadrat drin, als zeichen, das da drin was angewählt ist.
Ich habe unten eine Grafik gemacht wo der Rote Punkt der Klick mit der Maus bedeutet.
Wenn das Passiert sollte das dann so ausehen wie es da gezeigt wird.
ICh hoffe mir kann jemand erklären wie ich das am Klügsten mache, am besten am Unkomplizierten.
Am besten wäre es, wenn man das in ein Timer stecken kann und es dort laufen lässt.
Es soll der ganze Baum aktualisiert werden.
Hoffe das mir da jemand helfen kann.
MfG
hui1991
Lannes - Do 10.05.07 09:45
Hallo,
warum einen Timer und den ganzen Baum aktualisieren :gruebel: , man muss doch nur die Eltern-Nodes(Parent) aktualisieren.
Such Dir eine Variante aus:
1. while-Schleife
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var aNode : TTreeNode; begin aNode := TreeView.GetNodeAt(x,y); while Assigned(aNode.Parent) do begin aNode := aNode.Parent; end; end; |
2. for-Schleife
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var aNode : TTreeNode; z : Integer; begin aNode := TreeView.GetNodeAt(x,y); for z := aNode.Level downto 1 do begin aNode := aNode.Parent; end; end; |
3. rekursiv
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure SetStateIcon(aNode: TTreenode); begin if Assigned(aNode.Parent) then SetStateIcon(aNode.Parent);end;
var aNode : TTreeNode; begin aNode := TreeView.GetNodeAt(x,y); if Assigned(aNode.Parent) then SetStateIcon(aNode.Parent); end; |
hui1991 - Do 10.05.07 12:16
hi,
lol, es gibt parent naja denken sollte man tun :idea:
Ja bin grad in school
MfG
hui1991
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!