Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Exception bei Programmende (https://www.delphipraxis.net/205183-exception-bei-programmende.html)

Delphi.Narium 10. Aug 2020 10:33

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).

freimatz 10. Aug 2020 10:52

AW: Exception bei Programmende
 
<deleted>

KodeZwerg 10. Aug 2020 11:04

AW: Exception bei Programmende
 
Aber ohne ein
Delphi-Quellcode:
Application.Run
ist doch das Application Object noch gar nicht voll Funktions bereit?
Die ganzen
Delphi-Quellcode:
Messages
und SpeicherManager usw sind da doch noch inaktiv, oder?

Delphi.Narium 10. Aug 2020 11:15

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:
      repeat
        try
          HandleMessage;
        except
          HandleException(Self);
        end;
      until Terminated;
Aber eigentlich geht das am Thema vorbei.

KodeZwerg 10. Aug 2020 11:49

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?

hoika 10. Aug 2020 11:57

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?

H.Bothur 10. Aug 2020 12:09

AW: Exception bei Programmende
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1471499)
Es geht durchaus ohne das Application.Run.

Das Programm 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).

Stimmt - ich glaube das war der Grund - das Programm sollte automatisch starten und sich dann von alleine auch wieder beende - aber eben anzeigen was es tut :-)

Hans

H.Bothur 10. Aug 2020 12:33

AW: Exception bei Programmende
 
Zitat:

Zitat von KodeZwerg (Beitrag 1471514)
Freimatz schrieb CallStack

Sorry - aber wie gebe ich das aus ??

Zitat:

oder andere wollten "Was macht [Verarbeitung]" wissen
Da wird einfach eine CSV-Datei eigelesen, umformatiert und drei andere CSVs wieder ausgegeben:

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:

KodeZwerg gab eine dpr & Formular Anpassung. Gibt's Fortschritte?
Noch nicht - da muss ich mehr dran machen weil so die zweite Form noch gar nicht zur Verfügung steht.

Zitat:

Zitat von hoika (Beitrag 1471515)
Liegt das Programm zufällig auf einem Netzlaufwerk?

Ja - Laufwerk i:\

Zitat:

2. Setze in der DPR auf das end. einen Breakpoint und drücke dann F7.
Die Exception kommt wirklich erst wenn das end. aus der .dpr erreicht wird.

Zitat:

3. Arbeitest Du mit interfaces?
Nein

Ich hoffe das hilft irgendwie weiter :-)

Gruß
Hans

Sherlock 10. Aug 2020 12:43

AW: Exception bei Programmende
 
Verzichte auf das Application.Terminate

Sherlock

Delphi.Narium 10. Aug 2020 12:49

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 14:22 Uhr.
Seite 2 von 4     12 34      

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