DerWolf Geschrieben 17. Februar 2003 Geschrieben 17. Februar 2003 Hallo Leute! Ich habe mal wieder ein Problem! Ich möchte die Indices einer Tabelle in einem TreeView bzw. in einem ListView ausgeben. Ich habe es so gemacht, das wenn man auf den Eintrag im TreeView clickt (OnClick-Ereignis), dieser sich weiter öffnet und das Ergebnis anzeigt. Dementsprechend auch das Ergebnis im ListView. Bis jetzt wird aber leider nix angezeigt! Ich habe da mal ein Auszug aus meinem Code: try Table1.IndexDefs.Update; { Aktuell verfügbare Indizes abrufen } except end; If not TreeView1.Selected.HasChildren then begin //Hat der selektierte Eintrag Kinder? for n:=0 to Table1.IndexDefs.Count-1 do begin //Zählt die Indices der Tabelle if not IsDuplicateName(TreeView1.Selected, Index[n], true) then //TreeView1.Items.AddChild(TreeView1.Selected, Index[n]); if(Table1.IndexDefs.Items[n].Options * [ixPrimary]) = ([ixPrimary])then TreeView1.Items.AddChild(TreeView1.Selected, Table1.IndexDefs.Items[n].Fields); Wenn Fehler drin sind, könnte jemand mir diesen zeigen? [Newbie] Vielleicht noch einen anderen Lösungsvorschlad? Danke im voraus! MfG DerWolf Zitieren
geloescht_JesterDay Geschrieben 17. Februar 2003 Geschrieben 17. Februar 2003 zum Ersten: Ein TreeView zeigt vor den Knoten ein Plus an, wenn man darauf klickt, wird der Knoten geöffnet (es kann auch der Doppelklick genutzt werden). Mit der Eigenschaft ShowButtons kann man einstellen, ob das Plus angezeigt wird oder nicht.. Beim Öffnen wird das OnExpand Ereignis ausgelöst. Dort kann man die Kinder dann anhängen. Ein einfacher Klick auf einen Knoten im Baum führt normalerweise nicht zu sowas und man sollte sich daher schon an das halten, was sonstwo auch üblich ist. Beim füllen des Knotens wird normalerweise TreeView.Items.BeginUpdate aufgerufen. Damit werden alle Ereignisse erstmal ausgeschaltet (auch das ZEichnen des TreeViews). Wenn man fertig ist wird TreeView.Items.EndUpdate aufgerufen und der Baum ist wieder verfügbar. Zum anhängen der Kinder gibt es mehrere Möglichkeiten. 1: Bei OnExpand löschts du erstmal alle Kinder und hängst sie neu an, so brauchst du nicht zu Suchen und Doppelt ist auch nix (geht meist schneller als Nach der Caption o.ä. zu suchen/vergleichen) 2: Du hängst beim Erstellen eines Knoten erstmal ein Kind dran, lässt den KNoten aber geschlossen. Dieses Kind markierst du als Dummy, entweder uber die Node.Data eigenschaft, indem du ein Objekt dranhängst mit dem du unterscheiden kannst (dummy oder nicht). Oder du machst es einfach über die Caption (Caption = 'Dummy') - Quick and Dirty. Bei OnExpand prüfst du ob das erste Kind ein Dummy ist, wenn ja wird es gelöscht und die richtigen Kinder werden drangehängt, wenn nciht tust du nix. Weitere Ideen können hier angehängt werden... Zum Auswählen eines Knoten solltest du das OnChange ereignis des TreeView benutzen, weil, man kann Knoten auch über die Tastatur auswählen. Tastatur aber <> OnClick! Das wäre erstmal alles was mir so einfällt... WAs mir noch einfiel, die eigenschaft hasChildren kannst du auch einfach so auf True setzen, das hat nicht wirklich was mit Kindern zu tun. Damit erreichst du, das vor dem KNoten ein PLus angezeigt wird, auch wenn u.U. keine Kinder danach kommen, da die Kinder erst beim Öffnen geprüft werden, siehe Windows Explorer als Beispiel für solch ein Verhalten. Zitieren
geloescht_JesterDay Geschrieben 17. Februar 2003 Geschrieben 17. Februar 2003 Originally posted by DerWolf if(Table1.IndexDefs.Items[n].Options * [ixPrimary]) = ([ixPrimary])then Noch was...was soll das eigentlich erreichen? Ich weiss jetzt nicht was die Options sind und habe sie noch nie benutzt, aber ich schätze einfach mal es geht um einen Flag-Vergleich... dieser wird normalerweise aber mit "AND" ausgeführt, ist im Endeffekt aber wohl egal Hintergrund: Dabei geht es um Zahlen, bessergesagt um die binäre Version vom Zahlen. Flag1 = 1 Flag2 = 2 Flag3 = 4 Flag4 = 8 Wenn "Flags" jetzt die Optionen enthält und es würde z.B. Flag1 und Flag3 enthalten nicht aber Flag2 bzw 4 würde Flags so aussehen (binär): 0101 Über ein logisches AND könnte das geprüft werden. Flags = 0101 Flag3 = 0100 Flags AND Flag3 = 0101 AND 0100 Ergebnis: 0100 (=Flag3) (Hinzufügen von Flags geht über ein logisches OR) Ich hoffe ich hab jetzt nicht irgendwelches dummes Zeug erzählt (was garnichts mit deinem Code zu tun hat) Vom Aussehen sieht dein Code aber danach aus. Zitieren
DerWolf Geschrieben 18. Februar 2003 Autor Geschrieben 18. Februar 2003 Jau, ich danke dir! Die Options habe ich auch schon wieder verworfen! Das Ergebnis, das ich erreichen wollte habe ich auch anders lösen können! Trotzdem Danke nochmal MfG Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.