Autor |
Beitrag |
Krumnix
      
Beiträge: 60
Win98,2000,XP
Delphi 7 Enterprise
|
Verfasst: So 27.10.02 23:26
Hallo.
Ich will in Form1 die Möglichkeit geben, Daten neu zu erstellen oder aus vorhandener Datei laden. Das funktioniert schonmal.
In Form2 werden dann diese Daten angezeigt und je nach dem, was für Daten man ausgewählt hat, wird das Form2 gestalltet (OnShow).
Dabei soll aus einer Konfigurationsdatei die Gestaltung ausgelesen werden.
Nun das Problem. Wenn ich in Form1 alles von Hand einstelle, wird Form2 so gestalltet, wie ich es will. Wenn ich aber in Form1 die Daten aus einer Datei laden lasse, bleibt Form2 unverändert. Es werden also keine Daten aus der anderen Datei geladen. Nur die aus Form1.
Ich lese die Daten per Memo1.Lines.LoadFormFile ein.
Weiß jemand, was ich da falsch machen? Muss ich da noch was beachten?
Thx
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mo 28.10.02 00:28
Hallo,
postet doch mal den Code der die Datei in das Memo läd.
Gruß
TINO
|
|
Krumnix 
      
Beiträge: 60
Win98,2000,XP
Delphi 7 Enterprise
|
Verfasst: Mo 28.10.02 01:42
Laden ins Memo bei Form1:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| laden: boolean; Name, Farbe.... : String;
TForm1.Button1Click begin Memo1.Lines.LoadFromFile(SetCurrentDir + '\datei.txt'); Name := Memo1.Lines[0]; Farbe := Memo1.Lines[1]; ..... Wert := Memo.Lines[5]; laden := true end; |
Laden des Memos in Form2:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| TForm2.FormShoe begin if laden := true begin Memo1.Lines.LoadFromFile(SetCurrentDir + '\config.txt'); ..... end; end; |
Hoffe, das es Dir was helfen kann. Also wenn ich in Form1 was geladen habe, soll er das durch die Variable laden feststellen und in Form2 dann Daten aus einer anderen Datei lesen.
(28.10.02 08:35 Tino) Code-Tags hinzugefügt.
|
|
Mike_C
      
Beiträge: 207
Win XP
D7 Enterprise
|
Verfasst: Mo 28.10.02 14:12
Du musst natürlich dafür sorgen, dass deine Form2 "weiß" ob in Form1 irgendwas geladen wurde.
Probier mal das hier:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type TForm2 = class(TForm) ... private FDoLoad: Boolean; public property DoLoad: boolean read FDoLoad write FDoLoad; end;
...
procedure TForm2.Show(Sender: TObject); begin if fDoLoad then begin ... //Hier der Code zum Daten verarbeiten end; end; |
in Form1 musst du dann noch folgendes machen
Quelltext 1: 2:
| ... Form2.DoLoad := True; |
Das sollte eigentlich gehen
_________________ Life is, what some people call a mystery. To me life's just a lesson, you're learning when you're through. So why do we try to understand?
|
|
Krumnix 
      
Beiträge: 60
Win98,2000,XP
Delphi 7 Enterprise
|
Verfasst: Mo 28.10.02 15:03
Form2 weiß ja, das in Form1 was geladen wurde. Das habe ich ja mit
laden: boolean schon gemacht.
Die Daten werde ja auch in Form2 eingebaut und stehen auf in den Variablen drin. Funktioniert also ohne Probleme.
Doch wenn ich in Form1 was lade aus einer Datei, anstelle mir alle Einstellungen von Hand zu machen, wird in Form2 die Datei nicht mehr geöffnet.
Die ganze Geschichte.
Ich habe Variablen global definiert. Diese sind also in Form1 und Form2 vorhanden. In Form1 werden Voreinstellungen vorgenommen. Also der Name und die Farbe sowie noch ein paar Dinge. Diese kann man einstellen oder sie werden aus einer Datei geladen, wenn man sich nicht die Mühe machen will. Danach wird über ein Button Form2 aufgerufen.
Dies Überprüft, ob in Form1 man die Daten von Hand oder aus einer Datei geladen hat (OnShow).
Wurden die Daten aus einer Datei geladen, so soll nur ein Teil in Form2 veränderbar sein. Damit man Form2 immer so gestalten kann, wie mal will, werden dazu Daten aus einer anderen Datei geladen und Form2 wird angepasst (Edit1.Text etc....).
Wenn ich aber in Form1 wiegesagt die Datei laden lasse, macht er in Form2 nix mehr. Es werden nur noch die Daten angezeigt, die ich in der Datei gespeichert hatte aus Form1 aber die Daten in Form2 werden nicht mehr geladen. Wenn ich aber in Form1 die Daten per Hand auswähle, wird in Form2 die Datei geladen und die Daten werde angezeigt.
Vielleicht muss ich irgendwas in Form1 schließen, damit Form2 laden kann. Da es aber zweit total verschiedene Dateien sind, steh ich vor einem Rätsel...........
|
|
Mike_C
      
Beiträge: 207
Win XP
D7 Enterprise
|
Verfasst: Mo 28.10.02 15:25
Krumnix hat folgendes geschrieben: | Vielleicht muss ich irgendwas in Form1 schließen, damit Form2 laden kann. Da es aber zweit total verschiedene Dateien sind, steh ich vor einem Rätsel........... |
Ok, ich glaub ich hab dein Problem verstanden.
Wenns mit Memo1.Lines.LoadFromFile(blablabla) nicht tut, probiers mal damit
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button1Click(Sender: TObject); var F: TextFile; s: string; begin AssignFile(F, 'datei.txt'); Reset(F); while not EoF(f) do begin ReadLn(F,S); Memo1.Lines.Add(s); end; CloseFile(F); //Hier dann das Datenhandling... laden := true; Form2.Show; end; |
und in Form2:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm2.FormShow(Sender: TObject); var F: TextFile; S: String; begin AssignFile(F,'datei2.txt'); Reset(F); while not eof(f) do begin ReadLn(F,S); Memo1.Lines.Add(S); end; CloseFile(F);
//Datenhandling... end; |
Du kannst mit der Methode auch direkt die Werte, die du gelesen hast auswerten:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| ... while not EoF(F) do begin ReadLn(F,S); inc(i); Data[i] := s; case i of 0: mach was 1: mach was anderes ... end; end; |
Dabei ist Data ein Array of String
_________________ Life is, what some people call a mystery. To me life's just a lesson, you're learning when you're through. So why do we try to understand?
|
|
Krumnix 
      
Beiträge: 60
Win98,2000,XP
Delphi 7 Enterprise
|
Verfasst: Mo 28.10.02 16:22
Tut mir leid, aber es funktioniert immer noch nicht. Ich kopier mal den ganzen Code hier rein, wie es nun aussieht. Vielleicht mache ich ja was ganz anderes falsch:
Das ist zum Laden in Form2,also Form1 gedacht:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| procedure TForm2.Button6Click(Sender: TObject); var F: TextFile; S: String; begin OpenDialog1.InitialDir := GetCurrentDir + '\speichern\held'; if Opendialog1.Execute then begin if FileExists(OpenDialog1.Filename) then begin Memo1.Lines.Clear; {Memo1.Lines.LoadFromFile(OpenDialog1.Filename);} AssignFile(F, OpenDialog1.Filename); Reset(F); while not EoF(F) do begin ReadLn(F,S); Memo1.Lines.Add(S); end; CloseFile(F); spieler[4].name := Memo1.Lines[0]; spieler[4].gesinn := Memo1.Lines[1]; spieler[4].rasse := Memo1.Lines[2]; spieler_held[4].staerke := strtoint(Memo1.Lines[3]); spieler_held[4].mut := strtoint(Memo1.Lines[4]); spieler_held[4].intelligenz := strtoint(Memo1.Lines[5]); spieler_held[4].geschicklichkeit := strtoint(Memo1.Lines[6]); spieler_held[4].verteidigung := strtoint(Memo1.Lines[7]); spieler_held[4].lebenspunkte := strtoint(Memo1.Lines[8]); spieler_held[4].magiestaerke := strtoint(Memo1.Lines[9]); spieler_held[4].magiepunkte := strtoint(Memo1.Lines[10]); spieler_held[4].bild_auswahl := Memo1.Lines[11]; spieler_held[4].bild_auswahl := spieler_held[1].bild_auswahl + Memo1.Lines[12]; zaehler_bild[4] := strtoint(Memo1.Lines[13]); restpunkt[4] := strtoint(Memo1.Lines[14]); end else Application.MessageBox('Ungültiger Datentyp','Warnung!',MB_OK + MB_ICONWARNING); Edit4.Text := spieler[4].name; ComboBox8.Text := spieler[4].gesinn; ComboBox6.Text := spieler[4].rasse; laden[4] := false; end; end; |
Das zum Laden in Form, also Form2:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73:
| procedure TForm3.FormShow(Sender: TObject); {Datenblatt initialisieren} var i: byte; bild, S: string; F: TextFile; begin spiel_count := 1; if laden[spiel_count] then zaehler := 1; if not(laden[spiel_count]) then zaehler := zaehler_bild[spiel_count]; Form3.Caption := spieler[spiel_count].name; Label2.Caption := spieler[spiel_count].name; Label4.Caption := spieler[spiel_count].rasse; Label6.Caption := spieler[spiel_count].gesinn; if laden[spiel_count] then bild := GetCurrentDir + char_verz + spieler[spiel_count].rasse + '\' + spieler[spiel_count].rasse + '1' + erw; if not(laden[spiel_count]) then bild := GetCurrentDir + char_verz + spieler[spiel_count].rasse + '\' + spieler_held[spiel_count].bild_auswahl; if FileExists(bild) then begin Image1.Picture.LoadFromFile(bild); {75 dpi, 300 Pixel breit} Image1.Stretch := true; end; if not(FileExists(bild)) then begin Panel1.Caption := 'Fehler beim Lesen des Bildes'; end; Button3.Enabled := false; Button2.Enabled := true; Button5.Enabled := false; Button6.Caption := 'Nächster Spieler'; for i := 1 to 4 do begin if FileExists(GetCurrentDir + char_verz + spieler[i].rasse + '\' + spieler[i].rasse + '.txt') then begin Memo1.Lines.Clear; {Memo1.Lines.LoadFromFile(char_verz + spieler[i].rasse + '\' + spieler[i].rasse + '.txt');} AssignFile(F,char_verz + spieler[i].rasse + '\' + spieler[i].rasse + '.txt'); Reset(F); while not eof(F) do begin ReadLn(F,S); Memo1.Lines.Add(S); end; CloseFile(F); spieler_held[i].max_bild := strtoint(memo1.Lines[0]); if laden[i] then begin spieler_held[i].staerke := strtoint(memo1.Lines[1]); spieler_held[i].mut := strtoint(memo1.Lines[2]); spieler_held[i].intelligenz := strtoint(memo1.Lines[3]); spieler_held[i].geschicklichkeit := strtoint(memo1.Lines[4]); spieler_held[i].verteidigung := strtoint(memo1.Lines[5]); spieler_held[i].lebenspunkte := strtoint(memo1.Lines[6]) * 10; spieler_held[i].magiestaerke := strtoint(memo1.Lines[7]); spieler_held[i].magiepunkte := strtoint(memo1.Lines[8]) * 5; spieler_held[i].bild_auswahl := spieler[i].rasse + inttostr(zaehler) + erw; zaehler_bild[i] := 1; restpunkt[i] := 5; end; end; end; Edit1.Text := inttostr(spieler_held[1].staerke); Edit2.Text := inttostr(spieler_held[1].mut); Edit3.Text := inttostr(spieler_held[1].intelligenz); Edit4.Text := inttostr(spieler_held[1].geschicklichkeit); Edit5.Text := inttostr(spieler_held[1].verteidigung); Edit6.Text := inttostr(spieler_held[1].lebenspunkte); Edit7.Text := inttostr(spieler_held[1].magiestaerke); Edit8.Text := inttostr(spieler_held[1].magiepunkte); Edit9.Text := inttostr(restpunkt[1]); if (spieler_held[1].max_bild = 0) or (spieler_held[spiel_count].max_bild = 1) then begin Button2.Enabled := false; Button3.Enabled := false; end; edit10.text := bild; end; |
Ist zwar etwas viel, aber vielleicht steckt der Fehler ja woanders......
|
|
Mike_C
      
Beiträge: 207
Win XP
D7 Enterprise
|
Verfasst: Mo 28.10.02 17:12
entdecke jetzt keine fehler
kannst du mir mal das ganze progg schicken? (meine mail ist: michael.kirches@gmx.de) dann kann ich mal schauen. vielleicht liegts auch an einer ganz anderen routine...
_________________ Life is, what some people call a mystery. To me life's just a lesson, you're learning when you're through. So why do we try to understand?
|
|
Krumnix 
      
Beiträge: 60
Win98,2000,XP
Delphi 7 Enterprise
|
Verfasst: Di 29.10.02 02:24
Ok. Die Lösung ist denkbar einfach. Ich habe im ersten Form einen Opendialog benutzt, wo der Benutzer das Ziel zum Speichern auswählen kann. Da dies meinst ein anderes Verzeichnis ist, hat sich der Pfad geändert. In dem anderen Form habe ich aber den Pfad per GetCurrentDir festgelegt. Durch das OpenDialog hat sich dieser aber verändert und so konnten in diesem Form die Daten nicht mehr geladen werden. Als ich aber im ersten Form keine Daten geladen haben, sonderen alles von Hand ausgewählt habe, hat sich der Standardpfad ja nicht verändert. Das war des Rätsels Lösung. Habe dann einfach den Pfad direkt beim Start des Programmes ermittelt und gespeichert. Der Rest war dann einfach
Danke aber für eure Hilfe
Greetz
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Di 29.10.02 10:04
Hi Krumnix
manchmal hat man einfach Tomaten auf den Augen
Aber noch ein Tipp dazu: Wenn du anstelle deiner Textdatei eine INI-Datei verwendest, könntest du dir jede Menge Schreibarbeit sparen. Wirf mal nen Blick in die Delphi-Hilfe dazu.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
|