AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi bei Laden aus Datei werden Create- Parameter verlangt
Thema durchsuchen
Ansicht
Themen-Optionen

bei Laden aus Datei werden Create- Parameter verlangt

Ein Thema von cook · begonnen am 18. Nov 2003 · letzter Beitrag vom 19. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
cook

Registriert seit: 4. Nov 2003
Ort: Ilmenau
37 Beiträge
 
Delphi 6 Enterprise
 
#1

bei Laden aus Datei werden Create- Parameter verlangt

  Alt 18. Nov 2003, 22:47
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
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! TEUFELSKREIS???

mfg cook
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: bei Laden aus Datei werden Create- Parameter verlangt

  Alt 18. Nov 2003, 22:55
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
cook

Registriert seit: 4. Nov 2003
Ort: Ilmenau
37 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: bei Laden aus Datei werden Create- Parameter verlangt

  Alt 18. Nov 2003, 23:03
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: bei Laden aus Datei werden Create- Parameter verlangt

  Alt 18. Nov 2003, 23:06
Moin Cook,

das könnte schlicht daran liegen, wie die Klassen aufgebaut sind.
Darüber hast Du schliesslich nichts geschrieben.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
cook

Registriert seit: 4. Nov 2003
Ort: Ilmenau
37 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: bei Laden aus Datei werden Create- Parameter verlangt

  Alt 18. Nov 2003, 23:09
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?!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: bei Laden aus Datei werden Create- Parameter verlangt

  Alt 19. Nov 2003, 19:01
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 von cook:
die sieht aber im wesentlich so aus wie die BeispielFahrzeugKlasse...
und woher sollte man die kennen?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
cook

Registriert seit: 4. Nov 2003
Ort: Ilmenau
37 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: bei Laden aus Datei werden Create- Parameter verlangt

  Alt 19. Nov 2003, 19:53
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.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: bei Laden aus Datei werden Create- Parameter verlangt

  Alt 19. Nov 2003, 20:47
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
cook

Registriert seit: 4. Nov 2003
Ort: Ilmenau
37 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: bei Laden aus Datei werden Create- Parameter verlangt

  Alt 19. Nov 2003, 21:14
Ok...
hier ist mal das Beispielprogi.
Aber nicht wundern, alles funzt da auch nicht.
Aber zumindest das was ich will geht!

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?!
Angehängte Dateien
Dateityp: zip vermietung_streams.zip (18,0 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: bei Laden aus Datei werden Create- Parameter verlangt

  Alt 19. Nov 2003, 21:34
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  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 11:40 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