Autor Beitrag
Phraser
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 19.07.02 22:46 
Hallo Leute!

Ich habe in den letzten vier Wochen ein Programm erstellt (unter XP mit Delphi 5, Name: Tour de France 2002), das auch letztendlich einwandfrei funktionierte.
Die exe-Datei konnt ich auf meinem PC und auf einem PC mit XP Home einwandfrei ausführen.

Alle anderen Betriebssysteme scheinen aber Probleme damit zu haben (ME, Win 98 etc.).

Nach ca. 5 sek. Ladezeit wird angezeigt diese anwendung wird aufgrund eines ungültigen vorgang geschlossen.Details:
TOUR DE FRANCE 2002 verursachte einen Ausnahmefehler

eedfadeH in modul unbekannt bei 0000:00000000
Register:
EAX=00000000 CS=0000 EIP=00000000 EFLGS=00000000
EBX=00000000 SS=0000 ESP=00000000 EBP =00000000
ECX=00000000 DS=0000 ESI=00000000 FS =0000
EDX=00000000 ES=0000 EDI=00000000 GS =0000
Bytes bei CS:EIP
Stapelwerte: etc. etc.

Nachdem ich Details beende kommt eine neue Meldung:
Exception EReadError in Modul TOUR DE FRANCE 2002.EXE bei 00010CE.Fehler beim lesen von ComboBox 4 oder 17.Items.Strings:Eine Win 32-API-Funktion ist fehlgeschlagen.


Das Programm läßt sich also nicht starten. Woran liegt das?
Vielleicht deswegen, weil ich unter XP programmierte, die exe aber nicht abwärtskompatibel ist? Was ist, wenn ich auf einem Win98 Rechner die exe nochmal ganz neu erzeuge?

Bitte helft mir, es ist sehr sehr dringend!! Ich lerne Delphi erst seit wenigen Monaten, also bitte verständlich erklären, DANKE! :(
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 20.07.02 08:54 
Titel: Re: HILFE - Prog läuft nur unter XP, aber nicht unter ME, 98
Phraser hat folgendes geschrieben:
Vielleicht deswegen, weil ich unter XP programmierte, die exe aber nicht abwärtskompatibel ist?

Wenn du nicht gerade spezielle NT-Systemfunktionen benutzt, dann ist so ein Programm auch unter anderen Windows-Versionen lauffähig.

Zitat:
Was ist, wenn ich auf einem Win98 Rechner die exe nochmal ganz neu erzeuge?

Ausprobieren.

Zitat:
... Fehler beim lesen von ComboBox 4 oder 17.Items.Strings

Hier wäre ein Ansatzpunkt. Schau mal in dein Programm, an welchen Stellen du was mit einer Combobox machst.
Phraser Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Sa 20.07.02 13:09 
Das Problem liegt darin, dass ich mehrere Formulare beim Programmstart automatisch erzeugen lasse

ausblenden Quelltext
1:
Application.CreateForm(...,...);					


Solange das unter 32 sind, klappt es noch. Da es aber einige mehr sind, gibt es diese Fehlermeldung.
Wie kann ich das umgehen??

BITTE HELFT MIR, ICH MUSS DAS HEUTE NOCH FERTIG MACHEN !!!
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Sa 20.07.02 13:28 
Hallo,

liegt es wirklich an der Anzahl der Forms oder an dem 32ten Form. Verwendest du in dem irgentwelche NT-Typischen Befehle (vieleicht Netzwerk Befehle).

Gruß
Klabautermann

PS: So viele Formulare beim Programmstart zu erzeugen ist sehr unschön. Wenn du wieder Luft hast solltest du dich mal mit dem Dynamischen erzeugen auseinandersetzen.
Phraser Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Sa 20.07.02 13:40 
Nein, solche Befehle habe ich garantiert nicht.

Kann ich denn zum Programmstart nur ein paar Formulare erzeugen und dann später im Verlauf die nächsten erzeugen und die zu Beginn erzeugten wieder schließen (oder so in der Art?)?

Wie erzeugt man denn normalerweise so viele Formulare? das kann doch nicht sein, dass nicht mehr als 32 Fomrulare erzeugt werden können...
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Sa 20.07.02 13:59 
In den Projektoptionen kannst Du festlegen welche Formulare automatisch erstellt werden sollen. Ich mach das immer so das nur das Hauptformular automatisch erstellt werden und die restlichen eben nicht.

Wenn ich dann ein Form brauche dann erstelle ich das, zeige es an, verarbeite die Eingaben und lösche es aus dem Speicher:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Var
  Form: tForm2;
Begin
  Form := tForm2.Create (Application.MainForm);
  { ... }
  Form.ShowModal;
  { ... }
  Form.Free;
End;

Gruß
TINO
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Sa 20.07.02 15:56 
kannst du mal nen downloadlink posten, dann kann ich mir mal das fertige prog angucken !!! Zwecks kompatibilität !!!

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Sa 20.07.02 16:29 
Phraser hat folgendes geschrieben:
Kann ich denn zum Programmstart nur ein paar Formulare erzeugen und dann später im Verlauf die nächsten erzeugen und die zu Beginn erzeugten wieder schließen (oder so in der Art?)?

Ja, man kann und solte, wie das geht hat Tino ja beschrieben. Das ganze hat den Vorteil, dass du nur für die Formulare resourcen belegst, die du in diesem Moment verwendest. Außerdem kannst du so auch beliebig viele Formulare des gleich Typs erzeugen, wass z.B. dann Praktisch ist wenn du deinen Benutzer erlauben willst mehrere Texte Paralel zu editieren. Eine begrenzung auf 32 Formulare konnte ich nicht feststellen, daher gehe ich davon aus, dass dein Programm auf dem Win98 Rechner tatsächlich alle Resourcen frisst und es deshalb nicht läuft.

Gruß
Klabautermann
Phraser Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Sa 20.07.02 18:34 
Danke schonmal, das hat mir teilweise weitergeholfen.

Wenn ich jeodch form wieder freigegeben habe, kann ich Komponenten auf dem Formular, das sich in Form befand, keine Werte mehr zuweisen.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  form: tteam2;
  i:integer;
begin
  Form := tteam2.Create (Application.MainForm);
  form.showmodal;
  form.free;
for i := 0 to 9 do
    begin
    team2.Teamstarke.cells[0,i] := combobox1.items[i];
    team2.Teamstarke.cells[1,i] := inttostr( ... );
    end;
end;


Mit dieser Prozedur wollte ich von einem Formular ins nächste wechseln und auf dem nächsten Formular einem Stringgrid Werte zuweisen.

Wie bekomme ich das hin?
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Sa 20.07.02 21:42 
Phraser hat folgendes geschrieben:
Wenn ich jeodch form wieder freigegeben habe, kann ich Komponenten auf dem Formular, das sich in Form befand, keine Werte mehr zuweisen.

Selbstverständlich nicht. Diese Komponenten "gehören" dem Form und somit entfern das Form sie aus dem Speicher, sobald es sich selber zerstört. Du musst das Free also ensprechend später aufrufen:


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  form: tteam2;
  i:integer;
begin
  Form := tteam2.Create (Application.MainForm);
  form.showmodal;
for i := 0 to 9 do
    begin
    team2.Teamstarke.cells[0,i] := combobox1.items[i];
    team2.Teamstarke.cells[1,i] := inttostr( ... );
    end;
  form.free;
end;


Gruß
Klabautermann
Savage
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 110



BeitragVerfasst: Sa 20.07.02 23:18 
Gehen nicht eigentlich die Daten in einen Stringgrid wieder verloren, wenn man dessen Form einfach wieder freigibt?

Daraus würde sich ja ergeben, dass wenn man die Daten noch verwenden will man diese Form auch "offen" lassen muss.

Zitat:
Mit dieser Prozedur wollte ich von einem Formular ins nächste wechseln und auf dem nächsten Formular einem Stringgrid Werte zuweisen.


Wenn du also alle Form's verwenden müsstest, stehst du wieder vorm gleichen Problem seit dem du brauchst nur einige von deinen über 32. :?

Zitat:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
 
var 
  form: tteam2; 
  i:integer; 
begin 
  Form := tteam2.Create (Application.MainForm); 
  form.showmodal; 
  form.free; 
for i := 0 to 9 do 
    begin 
    team2.Teamstarke.cells[0,i] := combobox1.items[i]; 
    team2.Teamstarke.cells[1,i] := inttostr( ... ); 
    end; 
end;



Du müsstest dann das Form.free nicht in deiner Procedure (zum schreiben oder lesen) aufrufen sondern erst dann, wenn du genau weist, dass du diese Form und dessen Inhalte im laufendem Programm nicht mehr benötigst und auch die Deklarierung der Form's müsstest du Global machen.

Bitte korrigiert mich, wenn falsch lag

mfg
Savage
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 21.07.02 15:01 
Ja,
die Daten gehen verloren wen das Form wieder Freigegeben wird.
Mann sollte immer versuchen die Daten in dem Formular sofort zu verarbeiten, so das es problemlos geschlossen werden kann. Ist das nicht moglich, sollte das Formular die Daten an ein verarbeitendes Objekt übergeben, so das es danach wieder geschlossen werden kann.
Auch wenn man Dinde wie ein StrinGrig hervoracgend verwenden Kann um Daten zu Speichern solte man eine andere Struktur, wie z.B. ein zwei Dimensionales Array vorzihen, da es wesentlich weniger Resourcen verbracht. Visuelle Komponenten sollte man nur da verwender wo die Visualisierung auch gebracht wird.

Gruß
Klabautermann