Autor Beitrag
matt
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 31.07.02 14:34 
Ich arbeite noch mit Delphi 1. Das Programm besteht aus einem Hauptformular und einer Reihe von Unterformularen vom Typ fsNormal die über ShowModal aufgerufen werden. Alle Formulare werden automatisch beim Programmstart mit CreateForm erstellt.

Nun habe ich verstärkt das Problem, dass beim Anzeigen des achten oder neunten Fensters plötzlich die Meldung "Fehler beim Erzeugen eines Fensters" erscheint und nichts mehr angezeigt wird.

Das Problem muss irgendwie mit der Ressourcen-Verteilung zusammen hängen. Ich habe schon mit den Stack- und Heap-Vorgaben gespielt, aber eine endgültige Lösung hat das auch nicht gebracht. Wer kann helfen?
GPF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 85



BeitragVerfasst: Mi 31.07.02 15:48 
Ich kann nur vermuten - den Quelltext bzw. das Programm müßte ich schon sehen um eine genaue Fehleranalyse zu starten.
Deine Fehlerbeschreibung läßt mich allerdings vermuten, daß Du zuviele Windowshandles benutzt. Alle Komponenten, die von TWinControl abgeleitet sind benötigen Windows Handles.
Windows 3.1 und Windows 95 können nur eine begrenzte Anzahl von Handles verwalten. Danach stürzt das System unweigerlich ab (Windows NT und Nachfolger haben diese Beschränkung nicht). Ich vermute mal, daß dies Dein Problem sein könnte. Versuche einfach mal das Programm unter Win NT/2000/XP zu starten. Tritt dann der Fehler immer noch auf?

Die einzigste Lösung besteht darin die Handleanzahl zu minimieren. Erstelle nur die Formulare, die Du wirklich benötigst. Eine andere Möglichkeit diese Limitierung zu umgehen besteht leider nicht.
matt Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 01.08.02 09:05 
In der Tat tritt das Problem bei Windows XP nicht auf. Allerdings muss ich auch für Windows 95 etc. eine Lösung finden, da dass Programm auch hier laufen muss.

Ich habe jetzt den Aufruf der Fenster verändert von
ausblenden Quelltext
1:
MyForm.ShowModal;					

nach
ausblenden Quelltext
1:
2:
3:
Application.CreateForm(TMyForm, MyForm);
MyForm.ShowModal;
MyForm.Free;

Damit sollten doch die Ressourcen beim Schließen des Fensters wieder freigegeben werden, oder? In der Praxis verhält sich das Programm jetzt auch stabiler, wenn auch noch nicht 100prozentig.
Renegade
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: Do 01.08.02 13:36 
So sollte es funktionieren :D

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
matt Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 02.08.02 08:17 
In anderen Beiträgen finde ich immer wieder folgendes Konstrukt:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
Var 
  MyForm: TMyForm; 
begin 
  MyForm := TMyForm.Create(self); 
  MyForm.ShowModal; 
  MyForm.Free;          
end;

Gibt es da einen wesentlichen Unterschied zu dem von mir verwendeten oder sind die beiden Versionen gleichwertig?
ausblenden Quelltext
1:
2:
3:
4:
5:
begin
  Application.CreateForm(TMyForm, MyForm); 
  MyForm.ShowModal;  
  MyForm.Free;
end;
Renegade
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: Fr 02.08.02 09:37 
Moin

Ich muß ganz ehrlich gestehen, daß ich dein Konstrukt vorher noch nicht gesehen habe :oops: !

Wenn ich das jetzt richtig in der eile in der Hilfe überflogen habe, sollte im endeffekt zwischen den beiden Varianten kein großer Unterschied bestehen.

Allerdings ist die letztere Variante in meinen Augen die mit Abstand gängigere Version.

Gruß

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."