Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Formular mehrmals öffnen -> Absturz (https://www.delphipraxis.net/14225-formular-mehrmals-oeffnen-absturz.html)

Morfio 5. Jan 2004 08:02


Formular mehrmals öffnen -> Absturz
 
Hallo,

ich habe ein Formular, das beim Start meiner MDI-Anwendung gleich nach dem Einloggen gestartet wird. Dieses Formular hat zwei Buttons, die versteckt sind. Innerhalb des Formulares befindet sich ein StringGrid. Klickt man einen Eintrag an, öffnet sich ein weiteres Formular, in dem man den Eintrag bearbeiten kann. Bis dahin kein Problem.

Innerhalb des zweiten Formulars sind aber wieder StringGrids. Und zusätzlich gibt es einen Button, mit dem man einen neuen Eintrag diesem StringGrid zuweisen kann. Klickt man auf diesen Button (Hinzufügen), öffnet sich erneut das erste Formular, auf dem die zwei versteckten Buttons nun angezeigt werden. Aus der Liste kann man nun einen Eintrag auswählen (einer der Buttons ist Wählen, der andere ist Abbrechen). Klickt man auf Wählen, wird der Eintrag auch übernommen. Bis hier auch kein Problem.

Innerhalb des Formulars kann man aber weitere von diesen zweiten Formularen öffnen, um Einträge zu editieren, zu löschen oder hinzuzufügen. Klickt man nun doppelt so einen Eintrag an, öffnet sich natürlich wieder das zweite Formular. Schließt man dieses wieder und klickt dann auf Abbrechen oder Wählen, so stürzt das gesamte Programme mit der Fehlermeldung:

Zitat:

Im Projekte BDB.exe ist eine Exception der Klasse EAccessviolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00CB134E. Lesen von Adresse FFFFFFFF'. Der Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Der Code, der dieses Fenster öffnet, lautet:

Delphi-Quellcode:
procedure TfrmBuchdatenbank.sgSucheDblClick(Sender: TObject);
begin
   Adresse := TfrmAdresseBearbeiten.Create(Self);
   Adresse.Show;
   Adresse.SetFields(sgSuche.Cols[0].Strings[sgSuche.Row]);
end;
Adresse ist global. Ich schätze mal, dadurch tritt der Fehler irgendwie auf, kann das sein?

Vielen Dank,

Morfio ...

Morfio 5. Jan 2004 08:04

Re: Formular mehrmals öffnen -> Absturz
 
Achso, zur Veranschaulichung noch ein Screenshot:

http://morfio.dyndns.org/db.jpg

Mario 5. Jan 2004 08:23

Re: Formular mehrmals öffnen -> Absturz
 
Ich habe es jetzt nur überflogen, aber mit
Delphi-Quellcode:
   Adresse := TfrmAdresseBearbeiten.Create(Self);
sagst Du: Erzeuge das Formular neu und weise es der Variablen Adresse zu. Wenn in Adresse schon was drin ist, egal... Das zuvor in Adresse gespeicherte Form ist dann also nicht mehr erreichbar.

Ergo: Jeder Zugriff des Formulars, wo zum Beispiel steht: Adresse.Caption, würde auf dem neuen Formular landen, Self.Caption dagegen immer noch auf dem richtigen.

Ich gehen aber mal davon aus, dass Du dort einfach mit Formularvariablen arbeitest, ohne zu wissen, welches Formular gemeint ist.

Du verwendest Show? Geht nicht ShowModal? Dann könntest Du die Variablen lokal halten und vermutlich wären die Probleme weg?!

Morfio 5. Jan 2004 08:45

Re: Formular mehrmals öffnen -> Absturz
 
Hi,

vielen Dank für die Hilfe. Genau das ist mein Problem momentan ... . Ich kenne mich mit Delphi dummerweise kaum aus und muß darin ein dickes Projekt realisieren (ich bin kurz vorm Abdrehen) und weiß ehrlich gesagt momentan nicht weiter.

Wenn ich ShowModal mache, kommt als Fehlermeldung: "Aus einem sichtbaren Fenster kann kein modales gemacht werden." ... . Hmm, vielleicht löse ich das anders ... ich weiß noch nicht.

Viele Dank,

Morfio ...

Mario 5. Jan 2004 08:48

Re: Formular mehrmals öffnen -> Absturz
 
Probiere mal das:
Delphi-Quellcode:
procedure TfrmBuchdatenbank.sgSucheDblClick(Sender: TObject);
var Adresse : TfrmAdresseBearbeiten;
begin
   Adresse := TfrmAdresseBearbeiten.Create(Self);
   try
     Adresse.SetFields(sgSuche.Cols[0].Strings[sgSuche.Row]);
     Adresse.ShowModal;
   finally
     Adresse.Free;
   end;
end;
Du musst vorher aber die Eigenschaft Visible vom Formular im Objektinspektor auf False setzen.

Morfio 5. Jan 2004 08:54

Re: Formular mehrmals öffnen -> Absturz
 
Wenn ich das Formular auf Invisible stelle kommt: Untergeordnetes MDI-Formular kann nicht verborgen werden.

Mario 5. Jan 2004 08:59

Re: Formular mehrmals öffnen -> Absturz
 
OK, dass es sich um eine MDI-Anwendung handelt, habe ich nicht gewußt. Das ist in dem Sinne ja ein Sonderfall und mein Weg ist dann der völlig falsche!

Hierzu solltest Du aber gar keine globale Formular-Variable benötigen, aber mit MDI hatte ich nie richtig was zu tun, ich kann Dir da also leider nicht helfen.

Morfio 5. Jan 2004 09:03

Re: Formular mehrmals öffnen -> Absturz
 
Ok,

dennoch vielen vielen Dank. Ich werde das Feature einfach anders implementieren und die Leute müssen damit halt zurecht kommen.

Morfio ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz