Einzelnen Beitrag anzeigen

Benutzerbild von Puddi
Puddi

Registriert seit: 25. Sep 2005
20 Beiträge
 
Delphi 2005 Architect
 
#1

Kein Zugriff mehr auf Formular

  Alt 27. Sep 2005, 22:23
Ahoi!

Ich hoffe, ich bin hier im richtigen Forum gelandet. Ich hätte da ein Problem, das mir bereits so einiges an Kopfzerbrechen bereitet hat. Vielleicht könnte mir ja jemand behilflich sein.

In meinem Hauptformular (Form1) wird per Knopfdruck ein weiteres Fenster (Form5) per ShowModal-Methode geöffnet.

Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  IF OpenDialog1.Execute
  THEN BEGIN
         AssignFile(Datei,OpenDialog1.FileName);
         Form5:=TForm5.Create(Self);
         TRY
           Form5.ShowModal;
         FINALLY BEGIN
                   Form5.Release;
                   Form5:=NIL;
                 END;
         END;
       END;
end;
In diesem Fenster soll die im OpenDialog ausgewählte Datei bearbeitet werden können. Bei einem Knopfdruck auf einen Button dieses Fensters soll nun eine Prozedur gestartet werden, die den gewählten Text in einer bestimmten Weise verarbeiten soll. Dazu muß zuerst eine Datenbank (Temp) gelöscht werden. Während der Löschung dieser Datenbank wird Form6 (ein Bitte-Warten-Fenster) per Show-Methode angezeigt. Nach der Löschung soll es automatisch geschlossen werden. Nach dieser Schließung soll dann Form3 angezeigt werden. Dieses Formular gibt den Fortschritt des eigentlichen Textverarbeitungsprozesses wieder.

Delphi-Quellcode:
procedure TForm5.BitBtn1Click(Sender: TObject);
begin
  IF MessageDlg('Die bestehende temporäre Datenbank wird dadurch gelöscht. Fortfahren?',mtWarning,mbOkCancel,0) = mrOK
  THEN BEGIN
         Form6:=TForm6.Create(Self);
         TRY
           Form6.Show;
           WITH Temp DO BEGIN
                          Active:=FALSE;
                          EmptyTable;
                          Active:=TRUE;
                        END;
         FINALLY BEGIN
                   Form6.Release;
                   Form6:=NIL;
                 END;
         END;
         Form3:=TForm3.Create(Self);
         TRY
           Form3.ShowModal;
         FINALLY BEGIN
                   Form3.Release;
                   Form3:=NIL;
                 END;
         END;
       END;
end;
Der Prozess selbst wird durch das OnShow-Ereignis von Form3 gestartet.

Delphi-Quellcode:
procedure TForm3.FormShow(Sender: TObject);
begin
  { hier ist dann meine tolle Prozedur }  
  { ... }  
  Form3.Close; // wenn fertig, soll das Fenster automatisch geschlossen werden
end;
Mein Problem ist nun folgendes: nach Betätigung des Buttons, der meine tolle Prozedur startet, wird diese plangemäß ausgeführt. Ob Form6 ordnungsgemäß geschlossen und released wird kann ich nicht erkennen, die Datenbank wird jedenfalls ordnungsgemäß geleert. Komischerweise wandert mein Programm aber daraufhin in den Hintergrund, und Delphi wird das aktive Programm. Wenn ich nun per Taskleisten-Klick mein Programm wieder in den Vordergrund hole, werden Form5 und dahinter Form1 wieder sichtbar. Form5 reagiert nun allerdings nicht mehr auf meine Eingaben. Auch ein Zugriff auf Form1 ist nicht mehr möglich. Es scheint fast so, als ob ein anderes Fenster außer Form1 oder Form5 noch modalen Charakter hat, dieses aber nicht mehr sichtbar ist. Ich hätte aber gerne, dass ich nach Beendigung der Prozedur wieder auf Form5 vollen Zugriff habe, dass dieses also wieder das aktuelle modale Fenster ist.

Um das Problem zu lösen hab ich erst einmal den Block, der Form6 anzeigt und die Datenbank löscht, entfernt. Das Ergebnis ist dann aber, dass Form3 (das Fortschrittsfenster) sich nicht mehr automatisch schließt. Wenn ich es per Systemmenü schließe, schließt sich danach auch automatisch Form5, und das möchte ich eigentlich nicht. Form1 reagiert aber wenigstens auf meine Eingaben.

Hat jemand eine Idee? Schätze mal, es handelt sich um einen relativ banalen Fehler. Aber irgendwie komm ich hohle Nuss nicht drauf .

Ich hab den restlichen Code, der meiner Meinung nach nichts mit dem Problem zu tun haben kann, rausgelöscht. Bei Bedarf reich ich den kompletten Quelltext gerne nach.

Danke vorab für Eure Bemühungen!
  Mit Zitat antworten Zitat