Autor Beitrag
Krumnix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win98,2000,XP
Delphi 7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 28.10.02 00:28 
Hallo,

postet doch mal den Code der die Datei in das Memo läd.

Gruß
TINO
Krumnix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win98,2000,XP
Delphi 7 Enterprise
BeitragVerfasst: Mo 28.10.02 01:42 
Laden ins Memo bei Form1:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 207

Win XP
D7 Enterprise
BeitragVerfasst: 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:

ausblenden 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

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win98,2000,XP
Delphi 7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 207

Win XP
D7 Enterprise
BeitragVerfasst: 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

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

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win98,2000,XP
Delphi 7 Enterprise
BeitragVerfasst: 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:
ausblenden volle Höhe Quelltext
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:
ausblenden volle Höhe Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 207

Win XP
D7 Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win98,2000,XP
Delphi 7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Di 29.10.02 10:04 
Hi Krumnix
manchmal hat man einfach Tomaten auf den Augen :wink:
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...