AGB  ·  Datenschutz  ·  Impressum  







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

Kniffliges Problem beim Serialisieren

Ein Thema von SMALLID · begonnen am 4. Feb 2007 · letzter Beitrag vom 10. Feb 2007
Antwort Antwort
Seite 2 von 3     12 3      
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: Kniffliges Problem beim Serialisieren

  Alt 7. Feb 2007, 18:59
Nicht lachen jetzt, aber es steht bei mir direkt unter Delphi-Referenz durchsuchenGetChildren
  Mit Zitat antworten Zitat
SMALLID

Registriert seit: 10. Aug 2004
78 Beiträge
 
#12

Re: Kniffliges Problem beim Serialisieren

  Alt 7. Feb 2007, 21:43
Hmm, bei mir nicht direkt. Also ich meine ich wäre von WriteComponent nicht zu GetChildren gekommen und GetChildren hat auch nur bei TCustomForm eine Beschreibung. Bei TComponent taucht die Methode nichteinmal in der Liste auf.

Zitat:
TCustomForm.GetChildren Methode

Gibt die untergeordneten Komponenten des Formulars zurück (also die Komponenten, deren Methode GetParentComponent das Formular zurückgibt).
Klasse
TCustomForm

Syntax


 procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
Beschreibung
Das Streamingsystem der Komponente ruft GetChildren auf, um die Ausführung eines Callback-Aufrufs für jede untergeordnete Komponente im Formular durch das Formular anzufordern. Die Callback-Aufrufe müssen in der Reihenfolge der Erstellung (Reihenfolge der untergeordneten Komponenten in der Formulardatei) erfolgen. Als untergeordnete Komponente gilt jede Komponente, die dieses Formular als Rückgabewert ihrer Methode GetParentComponent übergibt.

Proc ist die für jede untergeordnete Komponente auszuführende Callback-Funktion.

Root gibt die Top-Level-Komponente (beisielsweise ein Formular oder ein Datenmodul) an, die derzeit geladen oder gespeichert wird.
In TCustomForm-Objekten ruft GetChildren zunächst die geerbte Methode auf, die dann für jedes Steuerelement, das dieses Formular in seiner Eigenschaft Parent angibt, die Funktion in Proc ausführt. Bezeichnet der Parameter Root dieses Formular, führt GetChildren die in Proc angegebene Funktion anschließend auch für alle untergeordneten Komponenten aus, deren Eigenschaft Parent keinen Wert enthält.
Muh
  Mit Zitat antworten Zitat
oki

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

Re: Kniffliges Problem beim Serialisieren

  Alt 7. Feb 2007, 22:03
Das sieht doch schon mal gut aus. GetChildren ist auch bei mir unter TComponent zu finden. Ganz klar ist mir die Benutzung aber noch nicht.

Gruß oki
  Mit Zitat antworten Zitat
SMALLID

Registriert seit: 10. Aug 2004
78 Beiträge
 
#14

Re: Kniffliges Problem beim Serialisieren

  Alt 7. Feb 2007, 22:58
Also haltet mich für dumm oder so, aber ehrlich gesagt habe ich auch nicht so richtig Ahnung, was ich mit dem Parameter Proc anfangen soll Weiß da jemand Bescheid?
Muh
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: Kniffliges Problem beim Serialisieren

  Alt 8. Feb 2007, 10:00
Hallo,

schau mal:

Delphi-Quellcode:
interface

uses
  Classes;

type
  TDemoComponent = class(TComponent)
    procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  end;

implementation

procedure TDemoComponent.GetChildren(Proc: TGetChildProc; Root: TComponent);
var
  i: Integer;
begin
  for i := 0 to Pred(ComponentCount) do
    if not Components[i].HasParent then
      Proc(Components[i]);
end;
Wenn du ComponentA in deinem Testprojekt aus der Klasse TDemoComponent erzeugst und einen Haltepunkt in der Methode GetChildren() einbaust, dann wirst du schon sehen.

Du solltest aber schon noch ein wenig Zeit in das Studium der Delphi Streaming Funktionalität investieren, denn nur mit der Methode GetChildren() könntest du sonst schon bald ein Opfer des Eisberg-Syndroms werden. Nimm alleine mal die Methode HasParent. Neben Owner (object life cycle) und Parent (visibility) findest du dort ein weiteres Konzept (active or passive streaming).

Freundliche Grüße
  Mit Zitat antworten Zitat
oki

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

Re: Kniffliges Problem beim Serialisieren

  Alt 8. Feb 2007, 14:41
Joop,
da waren sie wieder meine drei Probleme. Der Verdacht mit dem Eisberg-Syndroms drängt sich automatisch auf. aber trotzdem der Standard-Spruch: "Jo, jetzt ist das klar."

Ich werd mir diesen thread mal in die Favoriten legen. Zum Glück steh ich momentan nicht vor diesem Problem. Aber sicher bald.

Gruß oki
  Mit Zitat antworten Zitat
SMALLID

Registriert seit: 10. Aug 2004
78 Beiträge
 
#17

Re: Kniffliges Problem beim Serialisieren

  Alt 8. Feb 2007, 22:18
Ich weine gleich

VIelen Dank für eure Hilfe. Das mit dem GetChildren klappt wunderbar. Jetzt tritt aber das nächste Problem auf.
Er schreibt nun alle Eigenschaften ordentlich in den Stream. Dann will ich sie wieder lesen und bekomme die Meldung "EReadError - Fehler beim Lesen von Neu5.priceMasterFS: Ungültiger Eigenschaftswert"



Jetzt sitze ich schon über 2 Tage an diesem sch...önen Speichern/Laden Problem :/
Muh
  Mit Zitat antworten Zitat
oki

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

Re: Kniffliges Problem beim Serialisieren

  Alt 8. Feb 2007, 22:26
Hatte es denn ohne GetChildren geklappt? Vielleicht steckt das Problem ja auch wo anders.

Gruß oki
  Mit Zitat antworten Zitat
SMALLID

Registriert seit: 10. Aug 2004
78 Beiträge
 
#19

Re: Kniffliges Problem beim Serialisieren

  Alt 9. Feb 2007, 01:39
An GetChildren lag es nicht. Das Problem habe ich dadurch gelöst, dass ich in "DefineProperties" eine Anweisung "DefineProperty(...)" hatte, die den gleichen Namen definierte, wie schon im interface Teil eine property hieß.
Ich hatte also eine property priceMasterFS und habe dann in DefineProperties "DefineProperty('priceMasterFS', ...) stehen gehabt. Als ich das durch reinen Zufall auf "DefineProperty('price', ...)" geändert hab, ging es dann. Very strange. Durch die Hilfe oder so wäre ich leider nie darauf gekommen.

Jetzt aber doch noch mal zu GetChildren und Co. Das Speichern funktioniert wunderbar (siehe Code unten, das ist die Datei die dabei rauskommt). Aber wenn ich das wieder lade werden die Agenten, die normalerweise dem Agentpool untergeordnet sind direkt dem Formular untergeordnet (obwohl's in der gespeicherten Datei richtig steht). Hab ich da nochwas vergessen?
Angehängte Dateien
Dateityp: txt j.experiment.experiment_501.txt (69,3 KB, 6x aufgerufen)
Muh
  Mit Zitat antworten Zitat
oki

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

Re: Kniffliges Problem beim Serialisieren

  Alt 9. Feb 2007, 07:49
Moin,

also wissen tu ich es auch nicht. Mach den Owner doch mal so sichtbar, dass er mit in die Datei aufgenommen wird. Vielleicht wird er dann beim Laden explizit richtig gesetzt. Im Moment sieht das so aus, dass durch getChieldren zwar alle Subcompos beim Speichern berücksichtgt werden, aber beim laden der Owner nicht aus der Tree-hirarchie ermittelt wird. Ich denke ein explizites sichtbar machen des Owners und dessen Laden könnte eventuell das Problem lösen.

Gruß oki
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 04: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