Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Seltsamer Fehler beim schließen (https://www.delphipraxis.net/181167-seltsamer-fehler-beim-schliessen.html)

Sir Rufo 21. Jul 2014 21:14

AW: Seltsamer Fehler beim schließen
 
Zitat:

Zitat von Satyr (Beitrag 1266258)
Ich habs nur für den close benutzt. Im Grunde nur zur reinen Übersichtlichkeit, für mich war der Code so strukturierter zu lesen.

Dann solltest du korrekterweise
Delphi-Quellcode:
Self.Close
nehmen, denn
Delphi-Quellcode:
Self
(in einer Methode) ist immer der Verweis auf die aktuelle Instanz.

Im Gegensatz dazu ist
Delphi-Quellcode:
Form1
der Verweis auf eine Instanz, die dort irgendwann mal von wem auch immer reingeschrieben wurde. Du kannst dir aber niemals sicher sein, dass das auch der Verweis auf die aktuelle Instanz ist, bei
Delphi-Quellcode:
Self
ist das per Definition immer so.

Satyr 21. Jul 2014 21:27

AW: Seltsamer Fehler beim schließen
 
Danke für die Hinweise und Tipps :).

Also eine MessageBox nach Run wird beim Beenden von dem Programm angezeigt. Nun weiß ich aber nicht genau wo ich die Formulare per Hand freigeben soll.

Es könnte trotzdem sein das ich hier irgendwo etwas falsch mache. Ich habe das für eine SplashScreen ein wenig umgebaut, die Anleitung fand ich damals per Google. Hier der Code:

Delphi-Quellcode:
program Conceptor;

uses
  madExcept,
  madLinkDisAsm,
  madListHardware,
  madListProcesses,
  madListModules,
  Forms,
  sysUtils,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {SplashScreen},
  Unit3 in 'Unit3.pas' {notepad},
  func in 'func.pas';

{$R *.res}

begin


Application.Initialize;
Application.Title := 'Conepter';

SplashScreen := TSplashScreen.Create(nil);
SplashScreen.Show;

application.ProcessMessages;
Sleep(1000);


  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(Tnotepad, notepad);


  Application.Run;
end.

himitsu 21. Jul 2014 21:32

AW: Seltsamer Fehler beim schließen
 
Delphi-Quellcode:
Application.Title := 'Conepter';
:stupid: C?

Du könntest nach dem Application.Run mal ein FreeAndNil(Application) reinmachen und danach noch eine MessageBox.
Oder erstmal nur
Delphi-Quellcode:
FreeAndNil(Form1); FreeAndNil(notepad);
nach dem Run.

Bzw. über Screen.CustomForms alle Fenster auflisten und Diese freigeben.


Als allererste Unit in der DPR eine Unit aufnehmen, die nur Windows einbindet (im Interface) und in Finalization eine MessageBox anzeigt.


Wer gibt eigentlich den SplashScreen wieder frei?

Satyr 21. Jul 2014 21:43

AW: Seltsamer Fehler beim schließen
 
Hm! Also das hier:

Delphi-Quellcode:
  Application.Run;

  FreeAndNil(Form1); FreeAndNil(notepad);
  Application.MessageBox('test', 'Test');
zeigt die Message an wenn ich das in Delphi rennen lasse, nicht aber auf dem Rechner mit Fehler. Da kommt nur wieder der Fehler und das wars.

Wenn ich dann die Formulare einzeln durchgehe, liegt der Fehler dann im Formular?

Edit: Den SplashScreen gebe ich in Form1 frei.

himitsu 21. Jul 2014 21:57

AW: Seltsamer Fehler beim schließen
 
Eine MessageBox noch zwischen die beiden Fenster und auch mal die Reihenfolge (der Free) tauschen
und schon weißt du bei welchem Form es hängt.

Das kann nun ein Code im OnDestroy sein oder eine der Komponenten.


PS: hier muß man aufpassen, denn wenn die Fenster schon vorher freigegeben wurden, dann steht in der Variable eine falsche Referenz, da normalerweise keiner diese Variablen freigibt, da sie keiner mehr kennt ... drum hatte ich auch das FreeAndNil verwendet, damit danach die Variable auch nil ist, denn dann knallt es "schöner", falls nochmal wer auf diese Variable zugreift.

Satyr 21. Jul 2014 22:02

AW: Seltsamer Fehler beim schließen
 
Dann wird mein Fehler irgendwo in Form1 sein. Im Destroy steht nichts drin. Dann gehe ich morgen jede Komponente einzeln durch.

Vielen Dank Euch für die Hilfe. Ich wusste nicht wo ansetzen und wie schon garnicht. Danke :).

pelzig 22. Jul 2014 00:14

AW: Seltsamer Fehler beim schließen
 
Ein ähnliches Problem hatte ich - schon länger her - auch mal und habe dann ewig rumgesucht und bei den potentiell Verdächtigen eine MessageBox-Meldung reingedengelt.

Gefunden habe ich dadurch den Fehler nicht, sondern eher durch Zufall: Im Hauptformular die Reihenfolge der eingebundenen Komponenten-Units ändern schuf Abhilfe :evil:

Testen musste ich die Echse aber (quasi nach jeder Buchstabenänderung im Quelltext) in einer VirtualBox (mit XP darin), in der kein Delphi installiert war (da mein Entwicklungsrechner-OS natürlich Delphi kannte).

MfG

himitsu 22. Jul 2014 01:00

AW: Seltsamer Fehler beim schließen
 
Zitat:

Zitat von pelzig (Beitrag 1266279)
Ein ähnliches Problem hatte ich auch mal ...

Dein Problem klingt zuerst mal nach einer falschen Initialisierungs-/Finalisierungsreihenfolge, welche vorallem dadurch entsteht, wenn man unnötige/ungünstige Units in Implementation, anstatt im Interface einbindet, wobei die Initialisierungs-/Finalisierungsreihenfolge sich zufällig ändern kann.

Bzw. nicht oder falsch deregistrierte Komponenten/Funktionen welche vorher registriert wurden.

pelzig 22. Jul 2014 01:15

AW: Seltsamer Fehler beim schließen
 
Ja und nun was denn? Vielleicht haz der TE genau dieses Problem? :?

MfG

himitsu 22. Jul 2014 01:34

AW: Seltsamer Fehler beim schließen
 
Dann ist aber das wahllose Rumpfuschen an der Unitliste der "falsche" Weg, denn so werden nur die Symptome behoben, aber nicht die Ursache,
womit das Problem also irgendwann unverhofft wieder auftauchen könnte.

Das Einzige, wo diese Art der Lösung nötig ist, wären Compilerfehler (die berühmten "internal error"), wenn schnell eine Lösung benötigt wird, oder wenn man mit einem Bugfix nicht mehr zu rechnen braucht.


Da kann man auch gleich die Hardcorelösung benutzen.
- ich kann mein Programm nicht beenden, ohne daß es zu Exceptions kommt
- na dann schieße ich das Programm einfach hart ab und weg ist das Problem


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 Uhr.
Seite 3 von 4     123 4      

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