Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi bei Laden aus Datei werden Create- Parameter verlangt (https://www.delphipraxis.net/12023-bei-laden-aus-datei-werden-create-parameter-verlangt.html)

cook 18. Nov 2003 22:47


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:
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;
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???

mfg cook

Christian Seehase 18. Nov 2003 22:55

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.

cook 18. Nov 2003 23:03

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:
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;
und da ist eigentlich nix anders... halt nur die Bezeichnungen!
Hab es ja mehr oder weniger 1:1 übernommen :lol:

Christian Seehase 18. Nov 2003 23:06

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. ;-)

cook 18. Nov 2003 23:09

Re: bei Laden aus Datei werden Create- Parameter verlangt
 
Das ist meine MaschinenKlasse
Delphi-Quellcode:
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;
die sieht aber im wesentlich so aus wie die BeispielFahrzeugKlasse...
Ich wollte jetzt nicht alles hier rein posten... oder?!

Christian Seehase 19. Nov 2003 19:01

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:

Zitat von cook
die sieht aber im wesentlich so aus wie die BeispielFahrzeugKlasse...

und woher sollte man die kennen? :gruebel:

cook 19. Nov 2003 19:53

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.

Christian Seehase 19. Nov 2003 20:47

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.

cook 19. Nov 2003 21:14

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?!

Christian Seehase 19. Nov 2003 21:34

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:29 Uhr.
Seite 1 von 2  1 2      

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