Autor Beitrag
z.1!
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 26.09.02 01:52 
Hi,

irgendwie kriege ich das folgende Problem nicht unter Kontrolle.

Habe einen fsMDIForm, aus der weitere fsMDIChilder geöffnet werden. Zum erzeugen benutze ich folgenden Code auf meine Hauptform
ausblenden Quelltext
1:
2:
3:
4:
5:
procedure openmychild;
Var mychildform: TMyChild; //Muss das auch in der TMyChildUnit stehen?
begin
  mychildform := TMyChild.Create(Application);
end;

TMyChild wird mehrmals erzeugt und hat den folgende OnCloseEvent
ausblenden Quelltext
1:
2:
3:
4:
procedure TMyChild.onClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

Auf TMyChild ist eine Timerkomponente und eine Http komponente, es werden in regelmäßigen, durch die Timerkomponente ausgelösten Abständen, Daten aus dem Internet mittels nmHttp heruntergeladen und ausgewertet.

Beim Schlieseen des TMyChild stürtzt das Programm ab. Mal steht da 'Not enough Timers available', selbst wenn nur ein MDIChild also auch nur eine Timerkomponente erzuegt und benutzt wird. Mal bleibt alles hängen. Mal bekomme ich Access Violation at ..... was muss ich beim schliessen eines mdichilds? Wenn ich mein Hauptfenster schliesse, kommt es schonmal vor daß zwar die Hauptform und alle mdichildren verschwinden, mein programm aber immer noch im taskmanager eingetragen ist. bin wirklich verzweifelt auf der suche nach der lösung.

:(
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 26.09.02 08:10 
Hallo,

postet doch mal die Code Abschnitte die im OnCreate und OnDestory des fdMDIForm stecken.

Gruß
TINO
z.1! Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 26.09.02 11:23 
Tino hat folgendes geschrieben:
Hallo,

postet doch mal die Code Abschnitte die im OnCreate und OnDestory des fdMDIForm stecken.

Gruß
TINO



hallo,


ok , also bei dem MDICHild sieht es im OnCreate so aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
procedure Tlsdlistchild.onCreate(Sender: TObject);
 begin
  lsdurl.text:=urlcont;
   lsdanz.text:=inttostr(anzcont);
  lsdname.text:=listcont;
end;


also nix besonderes es werden lediglich einige TEDit Felder beschrieben.


so sieht der OnClose Teil aus

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure Tlsdlistchild.onClose(Sender: TObject; var Action: TCloseAction);
begin
  if listtimer.enabled then listtimer.enabled:=false;
   if IsFileInUse(lsdname.text) then CloseFile(lsddata); 
    if http.connected then http.abort;
     Action:= caFree;
end;


Die Funktion IsFileInUse(Tfile) habe ich von swissdelphicenter.ch
hmm , OnDestroy habe ich nicht.... sollte ich?

danke
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: Do 26.09.02 11:32 
Hi
an deinen Codeausschnitten kann ich bisher auch nix auffälliges erkennen. Deswegen bitte nochmal genau lesen:
Tino hat folgendes geschrieben:

postet doch mal die Code Abschnitte die im OnCreate und OnDestory des fdMDIForm stecken.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
z.1! Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 26.09.02 13:01 
hmm , da steht nix :roll:

da auf meine fdMDIform nur ein paar knöpfe sind um die fdMDIChild Forms zu erzeugen, dachte ich müßte da ja auch nix stehen.

der absturz entseht ja auch nicht wenn ich meine fdMDIform sondern wenn ich ein fdMDIChild schliesse.

die hauptschleife in den fdMDIChild sieht übrigens in etwas so aus

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Procedure mainprocedure;
 begin
   http.get(url);
   assignfile...rewrite...write...close....
   mystringlist.LoadFromFile(dest);
    
   parsefile(dest);//unproblemtische stringoperationen werden ausgeführt

   if assigned( mystringlist) then mystringlist.free;
 end;



thnx