AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsamer Fehler beim schließen

Ein Thema von Satyr · begonnen am 21. Jul 2014 · letzter Beitrag vom 22. Jul 2014
Antwort Antwort
Seite 1 von 2  1 2      
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Seltsamer Fehler beim schließen

  Alt 21. Jul 2014, 21:27
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#2

AW: Seltsamer Fehler beim schließen

  Alt 21. Jul 2014, 21:32
Application.Title := 'Conepter'; C?

Du könntest nach dem Application.Run mal ein FreeAndNil(Application) reinmachen und danach noch eine MessageBox.
Oder erstmal nur 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?
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (21. Jul 2014 um 21:35 Uhr)
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Seltsamer Fehler beim schließen

  Alt 21. Jul 2014, 21:43
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#4

AW: Seltsamer Fehler beim schließen

  Alt 21. Jul 2014, 21:57
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Seltsamer Fehler beim schließen

  Alt 21. Jul 2014, 22:02
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 .
  Mit Zitat antworten Zitat
pelzig
(Gast)

n/a Beiträge
 
#6

AW: Seltsamer Fehler beim schließen

  Alt 22. Jul 2014, 00:14
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

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#7

AW: Seltsamer Fehler beim schließen

  Alt 22. Jul 2014, 01:00
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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (22. Jul 2014 um 01:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#8

AW: Seltsamer Fehler beim schließen

  Alt 22. Jul 2014, 13:11
Dann wird mein Fehler irgendwo in Form1 sein. Im Destroy steht nichts drin.
Das deutet eher darauf hin, dass du die Variable Form1 irgendwo veränderst oder selbst irgendwo freigibst.

Interessant, ExitProcess(0) geht, Halt(0) nicht.
Halt bedeutet:
Mit voller Fahrt gegen den Baum fahren um anzuhalten.
Bist du sicher, dass du das möchtest? Dass es dabei auch knallen kann, dürfte klar sein.

Gibt es noch eine andere Möglichkeit das finalisieren durchzusteppen, als wie gestern Abend? Zum Beispiel nur das was in Form1 passiert?
Debug-DCUs in den Projektoptionen aktivieren.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Seltsamer Fehler beim schließen

  Alt 22. Jul 2014, 13:20
Also wenn ich per grep search nach Form1 suche, kommt nichts wo ich das sonst beende oder freigebe.

Ich möchte Halt() nicht dauerhaft verwenden. Ich wollte nur mal testen was die Stelle mit dem Fehler nicht durchgeht, Halt() oder ExitProcess(). Ich habe (wieder Google) gelesen das Halt() trotzdem finalized und ExitProcess() nicht. Da bei Halt() der Fehler bleibt, ist mir so recht klar wo er ist. Nur wie ich weitersuche noch nicht so ganz. Was Debug-DCU's sind muss ich mir noch ergooglen *g*.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: Seltsamer Fehler beim schließen

  Alt 22. Jul 2014, 02:20
Da wir ja weiterhin nur vermuten können: Ich tippe auf den Splash-Screen, der mit Nil als Parameter erzeugt wurde ...

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,
  ...
{$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.
Also bei mir sieht das mit dem Splash-Screen (Form-Info) ein wenig anders aus:
Delphi-Quellcode:
program ...;
{$R *.dres}

uses
  Forms,
  UnitInfo in 'UnitInfo.pas{FormInfo},
  UnitMain in 'UnitMain.pas{FormMain},
  UnitData in 'UnitData.pas{DatMod: TDataModule},
  GlobalVars in 'GlobalVars.pas',
  DatBankEdit in 'DatBankEdit.pas',
  UnitPrint in 'UnitPrint.pas{FormPrint},
  ...
{$R *.res}

begin
  ReportMemoryLeaksOnShutdown := True;
  Application.MainFormOnTaskbar := True;
  FormInfo := TFormInfo.Create(Application);
  FormInfo.Show;
  FormInfo.Update;
  Application.Initialize;
  Application.Title := 'PC-Heil Blutzucker-Verwaltung v0.0.1.171';
  Application.CreateForm(TFormMain, FormMain);
  Application.CreateForm(TDatMod, DatMod);
  Application.CreateForm(TFormPrint, FormPrint);
  ...
  Application.Run;
end.
Ich benutze FormInfo auch noch als Info-Form während des Programmablaufs.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr.
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