![]() |
AW: Exception bei Programmende
Es geht durchaus ohne das Application.Run.
Das Prograsmm macht dann alles, was in der DPR steht und beendet sich dann automatisch wieder (funktioniert also ähnlich einem Konsolenprogramm, das zufällig / irrtümlich 'ne Oberfläche hat). Hab' ich schon häufiger so gelöst für Programme, die man einmal mit Oberfläche starten und steuern kann, die aber auch im Batchbetrieb eingesetzt werden konnten. Die Unterscheidung, ob Application.Run aufgerufen wird oder nicht, erfolgte dabei über Komandozeilenparameter. Kein Parameter, dann Run, ansonsten das, was die Parameter vorgaben. Ohne den Inhalt von MainForm.Verarbeitung; wird es bei der Fehlersuche aber eher schwierig. Fehler in der Entwicklungsumgebung nur mit oder nur ohne aktiven Debugger? Auch da kann es noch Unterschiede geben (auch wenn dem eigentlich nicht so sein sollte). |
AW: Exception bei Programmende
<deleted>
|
AW: Exception bei Programmende
Aber ohne ein
Delphi-Quellcode:
ist doch das Application Object noch gar nicht voll Funktions bereit?
Application.Run
Die ganzen
Delphi-Quellcode:
und SpeicherManager usw sind da doch noch inaktiv, oder?
Messages
|
AW: Exception bei Programmende
Also bei mir laufen solche Programme ohne Run seit Jahr und Tag problemlos.
Die Oberfläche ist in dem Fall ja nicht zur Bedienung da, sondern nur zur Anzeige dessen, was man dort ausgibt, z. B. 'ne Progressbar oder Infotexte für gerade gemachte Arbeitsschritte, ... Es sind streng genommen ja keine "Anwenderprogramme" sondern nur optisch nicht auf der Konsole, sondern mit Windowsmitteln, dargestellte Konsolenprogramme ;-) Bei meinem Delphi geht Run eigentlich nur ein eine "Endlosschleife", bis das Programm beendet wird.
Delphi-Quellcode:
Aber eigentlich geht das am Thema vorbei.
repeat
try HandleMessage; except HandleException(Self); end; until Terminated; |
AW: Exception bei Programmende
Ich habe zwar gerade kein Delphi offen vor mir aber das schaut mir exakt so aus wie das was Application.Run macht.
Recht hast Du, zurück zum Thema, Freimatz schrieb CallStack oder andere wollten "Was macht [Verarbeitung]" wissen oder KodeZwerg gab eine dpr & Formular Anpassung. Gibt's Fortschritte? |
AW: Exception bei Programmende
Hallo,
1. Liegt das Programm zufällig auf einem Netzlaufwerk? 2. Setze in der DPR auf das end. einen Breakpoint und drücke dann F7. 3. Arbeitest Du mit interfaces? |
AW: Exception bei Programmende
Zitat:
Hans |
AW: Exception bei Programmende
Zitat:
Zitat:
Delphi-Quellcode:
procedure TMainForm.Verarbeitung;
var timeDate : TDateTime; ArbeitsDatei: String; begin GrundeinstellungenLaden; AusgabeForm.InitSG; AktDatum := DateTimeToStr(Now); AktDatum := Copy(AktDatum, 7, 4) +Copy(AktDatum, 4, 2) +Copy(AktDatum, 1, 2); Arbeitsdatei := DatenVerzeichnis +EinleseDatei; if ParamStr(1) <> '' then Arbeitsdatei := ParamStr(1); if FileExist(Arbeitsdatei) then begin DatenLaden(ArbeitsDatei); MainForm.DateiNameLbE.Text := EinleseDatei; FileAge(DatenVerzeichnis +EinleseDatei, timeDate); MainForm.DateiDatumLbE.Text := DateTimeToStr(timeDate); MainForm.ZeilenZahlLbE.Text := FloatToStr(EinleseListe.Count); MainForm.Refresh; DatenVerarbeiten; AusgabeListeSchreiben; MailAnhang.Add(Arbeitsdatei); if not AllesSchreiben then Mailen.SendeMail(MailEmpfaenger, '', 'AXRO-Preisliste ' +DateToStr(date), MailAnhang); if (KopieSenden and not AllesSchreiben) then begin MailEmpfaenger := KopieEmpfaenger; Mailen.SendeMail(MailEmpfaenger, '', 'AXRO-Preisliste ' +DateToStr(date), MailAnhang); end; DatenSchreiben(Arbeitsdatei); AusgabeForm.SchreibePreispflegeDatei; AusgabeListeLoeschen; AusgabeForm.ShowModal; GrundeinstellungenSchreiben; end else ShowMessagePos('Preisdatei fehlt - Programm wird beendet !', 200, 200); Application.Terminate; end; Zitat:
Zitat:
Zitat:
Zitat:
Ich hoffe das hilft irgendwie weiter :-) Gruß Hans |
AW: Exception bei Programmende
Verzichte auf das Application.Terminate
Sherlock |
AW: Exception bei Programmende
Ohne Run muss dashier nicht sein: Application.Terminate; Mach das bitte mal weg. (Sherlock war schneller ;-))
Da Verarbeitung eine Routine von TMainForm ist, könnte statt des Application.Terminate auch ein Close reichen, zumindest mach ich das immer so, wenn ich ein Programm beenden will. Methode Close des Hauptformulars aufrufen. (Ist nämlich extra dazu da.) Mir widerstrebt es immer wieder, wenn an einer Stelle, an der sich ein Programm, aufgrund des programmierten Ablaufes, sowieso beendet nochmal zu schreiben: "Beende Dich". Ohne Run endet das Programm nach dem Aufruf von MainForm.Verarbeitung in der DPR. Warum muss dann in MainForm.Verarbeitung nochmal stehen: "Beende Dich"? Keine Ahnung, ob das jetzt irgendwelche Auswirkungen "im realen Leben" hat. Aber es ist mindestens moppeltgedoppelt (oder so ;-)) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 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