![]() |
bei Laden aus Datei werden Create- Parameter verlangt
Guten Abend alle zusammen...
Ich hab folgendes Problem: Ich habe in einer Datei verschiedene Daten einer Maschine gespeichert (mit eigener Klasse TMaschine) und will diese dann wieder auslesen. Jedoch wenn ich eine Instanz einer Maschine mit lMaschine := MaschinenClass.Create erzeugen will sagt er mir: nicht genügend wirkliche Parameter. D.h. ja normalerweise das ich diese dem Constructor Create übergeben muss, also: ...Create(Breite,Laenge,...); Jedoch soll er das ja aus der Datei auslesen und ich hab auch ein Beispielprogramm bei dem das so klappt. Dazu schreib ich erstmal fix den Quelltext :idea:
Delphi-Quellcode:
Jedoch lädt er mir nichts in lRaum bzw. lMaschine wenn ich vorher nicht die Instanz erzeuge. Aber das kann er ja nur mit den Daten die er mit LoadFromFile bekommt! :arrow: TEUFELSKREIS???
procedure TForm1.Projektladen1Click(Sender: TObject);
var rdProjekt : TReader; maschinenAnzahl ,i : Integer; RaumClass : TRaumRef; MaschinenClass : TMaschineRef; lRaum : TRaum; lMaschine : TMaschine; begin lbMaschinen.clear; // aktuelle Maschinen löschen OpenDialog.Filter:='Alle Dateien |*.*|Map-Files (*.map)|*.MAP'; OpenDialog.FilterIndex:= 2; if OpenDialog.Execute then begin for i:= 0 to 19 do aMaschine[i].free; strFile := TFileStream.Create(Opendialog.filename,fmOpenRead); rdProjekt := TReader.Create(strFile,2000); RaumClass := TRaumRef(findclass(rdProjekt.ReadString)); lRaum := RaumClass.Create; lRaum.LoadFromFile(rdProjekt); maschinenAnzahl := rdProjekt.ReadInteger; for i:= 0 to maschinenAnzahl-1 do begin MaschinenClass := TMaschineRef(findclass(rdProjekt.readString)); lMaschine := MaschinenClass.Create; lMaschine.LoadFromFile(rdProjekt); aMaschine[i] := lMaschine ; lbMaschinen.items.Add(aMaschine[i].Bezeichnung); end; rdProjekt.destroy; strFile.destroy; end; end; mfg cook |
Re: bei Laden aus Datei werden Create- Parameter verlangt
Moin Cook,
nur mal so als Idee: Mach' doch das, was Du mit LoadFromFile machst im constructor. Dann müsstest Du bei Create als Parameter den Dateinamen übergeben. |
Re: bei Laden aus Datei werden Create- Parameter verlangt
Meinste das geht?
Ich will ja nicht ständig nur von Datei ne Instanz erzeugen und somit würde er doch bestimmt meckern über das LoadFromFile im Constructor wenn gar keine File da is. Mich wundert es halt blos das es in dem Beispielprogramm auch funzt:
Delphi-Quellcode:
und da ist eigentlich nix anders... halt nur die Bezeichnungen!
procedure TformMain.btLadenClick(Sender: TObject);
var rdFahrzeuge : TReader; iAnzahl ,i : Integer; FahrzeugClass : TFahrzeugRef; lFahrzeug : TFahrzeug; begin lbFahrzeuge.clear; // aktuelle Fahrzeuge löschen OpenDialog.Filter:='Alle Dateien |*.*|Sav-Files (*.sav)|*.SAV'; OpenDialog.FilterIndex:= 2; if OpenDialog.Execute then begin for i:= 0 to 19 do begin aFahrzeuge[i].free; end; strFile := TFileStream.Create(Opendialog.filename,fmOpenRead); rdFahrzeuge := TReader.Create(strFile,2000); iAnzahl := rdFahrzeuge.ReadInteger; for i:= 0 to iAnzahl-1 do begin FahrzeugClass := TFahrzeugRef(findclass(rdFahrzeuge.readString)); lFahrzeug := FahrzeugClass.Create; lFahrzeug.LoadFromFile(rdFahrzeuge); aFahrzeuge[i] := lFahrzeug ; lbFahrzeuge.items.Add(aFahrzeuge[i].Kennzeichen); end; rdFahrzeuge.destroy; strFile.destroy; end; // If Laden end; Hab es ja mehr oder weniger 1:1 übernommen :lol: |
Re: bei Laden aus Datei werden Create- Parameter verlangt
Moin Cook,
das könnte schlicht daran liegen, wie die Klassen aufgebaut sind. Darüber hast Du schliesslich nichts geschrieben. ;-) |
Re: bei Laden aus Datei werden Create- Parameter verlangt
Das ist meine MaschinenKlasse
Delphi-Quellcode:
die sieht aber im wesentlich so aus wie die BeispielFahrzeugKlasse...
TMaschine = class(TRaum)
private FHersteller : string; FTeileProStunde : integer; FSonstiges : string; FPositionX : single; FPositionY : single; procedure SetPositionX(x: single); procedure SetPositionY(y: single); procedure SetTeileProStunde(teile: integer); public property Hersteller: string read FHersteller; property TeileProStunde: integer read FTeileProStunde write SetTeileProStunde; property PositionX: single read FPositionX write SetPositionX; property PositionY: single read FPositionY write SetPositionY; constructor Create(Hersteller, Bezeichnung, Sonstiges: string; Breite, Laenge: Real48; TeileProStunde: integer) overload; property Sonstiges: string read FSonstiges write FSonstiges; procedure WriteToFile(W: TWriter); override; procedure LoadFromFile(L: TReader); override; end; Ich wollte jetzt nicht alles hier rein posten... oder?! |
Re: bei Laden aus Datei werden Create- Parameter verlangt
Moin cook,
da die Klasse TRaum von der TMaschine abgeleitet ist nicht mit dabeisteht, hilft das nicht unbedingt weiter ;-) Was mir nur aufgefallen ist: Beim Constructor steht overload. Bist Du sicher, dass Du nicht besser override benutzen solltest? Zitat:
|
Re: bei Laden aus Datei werden Create- Parameter verlangt
Naja... kennen sollte man die nicht. Wollte damit nur ausdrücken das es bei dem Progi auch funzt und das ist genauso aufgebaut wie meins. Deshalb versteh ich eben nicht warum das bei mir nicht geht.
Mit overload und override bin ich mir nicht sicher, da ich noch ziemlicher Delphi-Neuling bin. Hab aber z.b. auch mal probiert die Instanz direkt mit ...Create(0,0,'') zu initilisieren. Das klappt dann und es werden meine gespeicherten Werte drübergeschrieben. Aber in meinem Beispiel geht das eben auch ohne diese Parameterübergabe. |
Re: bei Laden aus Datei werden Create- Parameter verlangt
Moin cook,
ohne weitere Informationen, wie das in Deiner Beispielklasse geregelt wird, hätte ich so auch keine Idee. ggf. könntest Du die ja mal anhängen. |
Re: bei Laden aus Datei werden Create- Parameter verlangt
Liste der Anhänge anzeigen (Anzahl: 1)
Ok...
hier ist mal das Beispielprogi. Aber nicht wundern, alles funzt da auch nicht. Aber zumindest das was ich will geht! :gruebel: Also nochmal im Schnelldurchlauf: Ich will wissen warum es bei dem Progi funktioniert das in der Prozedur TformMain.btLadenClick(Sender: TObject) eine Instanz lFahrzeug := FahrzeugClass.Create erzeugt werden kann, obwohl da keine Parameterübergabe stattfindet?! |
Re: bei Laden aus Datei werden Create- Parameter verlangt
Moin cook,
ich hab's mir jetzt mal angeschaut. Leider kann ich Dir da jetzt nicht weiterhelfen, da ich mich im Umgang mit TReader/TWriter nicht auskenne. |
Re: bei Laden aus Datei werden Create- Parameter verlangt
Naja, trotzdem danke für die Mühe.
Hab es halt jetzt so gemacht das ich 0 Parameter übergebe. So wird die Instanz erstmal initialisiert und ich kann sie mit den gespeicherten Werten überschreiben. Ist zwar bestimmt nicht die schönste Lösung :roll: , aber es ist eine :zwinker: tschau cook |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz