Zum Inhalt springen

[Delphi] Indices einer Tabelle anzeigen lassen


DerWolf

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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... :D

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...