AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Treeview und datapointer...

Ein Thema von barnti · begonnen am 1. Dez 2003 · letzter Beitrag vom 11. Dez 2003
Antwort Antwort
Seite 1 von 2  1 2      
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Treeview und datapointer...

  Alt 1. Dez 2003, 15:36
Hallo,

ich möchte Informationen in einen Treeview überführen. Dazu mache ich folgendes:

Delphi-Quellcode:
...
 LastInserted.Data:= ParamArray[i].FieldByName(ParamArray[i].FieldList[0].FieldName);
...
LastInserted ist vom Typ TTreeNode, Im ParamArray werden 3 Querys übergeben, um diese im Treeview darzustellen.
Den Datapointer lasse ich auf ein Feld des Datasets der Query zeigen.

Meine Frage: Wie kann ich die gespeicherte Information wieder auslesen? Kann ich das überhaupt? Oder muss ich den Pointer auf etwas anderes zeigen lassen. Ich möchte ja eigentlich der Wert des Feldes haben!

Danke & Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Treeview und datapointer...

  Alt 3. Dez 2003, 08:06
Hmm,

ich versuche das noch mal zu verdeutlichen:

Ich möchte die Informationen meiner Query in eine Treeview überführen. Dazu möchte ich in jedem Knoten das aktuelle Record speichern. In Etwa so:

Delphi-Quellcode:
... // einfügen eines neuen Knotens mit der Betitelung
                              // der ID des akt. records
LastInserted:= Treeview.Items.AddChild(node,Query.FieldByName('ID'));

LastInserted.Data:= Query.? // wie bekomme ich hier einen Zeiger auf das aktuelle
                             // Record gespeichert?????
Die zweite Frage ist wie kann ich die Informationen wieder auslesen, wenn ich z.B. den Inhalt des pointers (Record der Query) an einer bestimmten Stelle, sprich ein Feld, auslesen möchte?

Kann jemand helfen. Meine Pointer-Kenntnisse sind etwas eingestaubt!

Danke,

Barnti
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Treeview und datapointer...

  Alt 3. Dez 2003, 08:19
Hi,

grundsätzlich ist die Eigenschaft Data des TTreeNode vom neutralen Typ Pointer. Alles was du mit einem typisierten Pointer vorrätig hast kannst du jetzt dort hinterlegen. Willst du den Pointer auf deine Daten zurückhaben, so mache einfach folgendes:
   MeinetTypPointerVariable := TypPointer(TreeView.Data); Danach zur Sicherheit auf nil prüfen und du kannst mit deiner Variablen wie gewohnt weiterarbeiten. Das gilt so auch für Objekte!

Hier auch mal ein Bsp.:

var MObject : TObject;
begin
MyObject := TObject.Create;
MyTreeNode.Data := Pointer(MyObject);
....
MyObject := TObject(MyTreeNode.Data);
// und dann weiter auf Members von MyObject wie gewohnt zugreifen
MyObject.Free;
end;
[delphi]

Gruß oki
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Treeview und datapointer...

  Alt 3. Dez 2003, 08:35
Hallo Oki,

ich habe mal nach Deinem Beispiel gearbeitet:

Delphi-Quellcode:
var LastInserted: TTreenode;

...
 
LastInserted.Data:= Pointer(ParamArray[i].DataSource.DataSet.Fields);

Fields:= TFields(Lastinserted.Data^); [edit] Ok, hier nur TFields
                                             (Lastinserted.Data). Aber warum?
                                       Muss ich nicht auf den Inhalt zugreifen? [/edit]

ShowMessage(Fields.DataSet.FieldByName('ID').AsString); // An dieser Stelle
                                                               // steigt Delphi mit

                                                   // einer Schutzverletzung aus...
Ansonsten habe ich Deine Anweisungen eingehalten. Der Pointer kann nicht nil sein, da ich diesen ja vorher zuweise.

Was mache ich jetzt noch falsch?

Gruß,

Barnti
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Treeview und datapointer...

  Alt 3. Dez 2003, 10:16
Hi,

mir fehlt offensichtlich noch ein Stück vom Anfang Deiner Anwendung. Aber grundsätzlich mal folgendes.

Wenn du eine aktuelle Querry im Data halten willst, dann mußt du natürlich auch sicherstellen, dass die Instanz auf die dein Pointer zeigt noch vorhanden ist. Desweiteren fällt mir auf, dass du hier nicht den Zeiger zuweist, sondern den Inhalt( durch die dereferenzierung ^).

Ich denke, die korrekte Zeile muß so lauten:
Fields:= TFields(Lastinserted.Data);
Gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Treeview und datapointer...

  Alt 3. Dez 2003, 12:42
Ist mir auch mit Schrecken aufgefallen, daß Bezug auf die ParamListe eines Queries genommen wird, daß klicks später vielleicht schon zerstört wird...

Wenn Du unbedingt ein paar Daten speichern mußt, mach Dir ein record :

RMyData = packed record
ID : integer;
// Bla
end;
PMyData = ^RMyData;

function NewData: PMyData;
begin
New(Result);
end;



Dann knall Dir das in den TreeView :
...
LastInserted.Data := NewData;
...

und nun bearbeiten :

...
PMyData(LastInserted.Data)^.ID := Fields[0].AsInteger; // weißt schon
...


LG, MyRealName
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Treeview und datapointer...

  Alt 3. Dez 2003, 13:25
Hallo,

ich habe es mit dem Beispiel von Oki hinbekommen. Danke, Oki!

Zitat:

Ist mir auch mit Schrecken aufgefallen, daß Bezug auf die ParamListe eines Queries genommen wird, daß klicks später vielleicht schon zerstört wird...
Das verstehe ich nicht. Ich speichere in Data den Verweis auf den aktuellen Datensatz...
Die Prozedur dient lediglich dem Darstellen einer oder mehrerer Querys als Treeview. Mit einem Klick kann man dann auf den Inhalt des Trees(data) zugreifen...

Besteht da ein Problem, welches ich nicht sehe?

Gruß & Danke,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Treeview und datapointer...

  Alt 3. Dez 2003, 13:43
Wenn Du ein Query benutzt, um immer wieder neue Daten zu in die Datenbank zu setzen, dann werden die Field- und Param-Listen des Query-Objekts immer wieder zerstört bei jeder neuen Query und damit die Pointer, die Du speicherst, ungültig. Zum anderen ist es eine sehr ineffiziente Methode, Objekte zu halten, nur wegen ein paar Variablen. Das ist die pure Verschwendung. Aber was sag ich, das ist ja heutzutage unter windows normal... Wenn ich da an die guten alten DOS-Zeiten denk, wo man mit Assembler um jedes Byte gefeilscht hat

MRN
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Treeview und datapointer...

  Alt 3. Dez 2003, 13:52
Hi,

Natürlich hat myrealname recht mit dem thema Speicher. Das ist ein thema dessen sich barnti als nächstes annehmen sollte. Also eine Möglichkeit finden, mit der nur das im Tree gehalten wird was nötig ist. Trees sind halt auch mal schnell mit vielen Nodes gefüllt und wenn dann an jedem Node ein Speicherjumbo hängt gehen die Ressourcen schneller den Bach runter als man gucken kann.

Grundsätzlich wollte ich aber erst mal das Thema zur Lösung bringen. (Erster Schritt vor zweitem).

Gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Treeview und datapointer...

  Alt 3. Dez 2003, 14:09
Tree's sind schnell gefüllt mit Nodes ?
Womit programmierst Du ? Delphi wohl eher ned *haha*...
Also die Wrapper-Klasse von Delphi suckt in der Beziehung total. Erstell mal auf die "Schnelle" 10000 nodes *muhahahaha*

Am besten kann man sehen, wie langsam sowas ist, wenn man mal 10.000 TLabels erzeugt. Einmal einfach nur so und einmal mit Parent...

MRN
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz