Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler abfangen aber wie ? (https://www.delphipraxis.net/30461-fehler-abfangen-aber-wie.html)

ACID-1 25. Sep 2004 07:29


Fehler abfangen aber wie ?
 
:?:
Question
Hi, habe da ein kleines Problem. Bin neuling bei Delphi und möchte mein erstes Programm schreiben aber es klappt nicht so wie ich es möchte.

Ich habe 4 Editfelder wo der Benutzer aber nur zwei Ausfüllen braucht und die restlichen zwei werden berechnet. Die Auswahl welche zwei Ausgefüllt werden sollen ist dem Benutzer überlassen. Wenn ich nun das Programm starte und Ein Editfeld leer lasse stürzt das Programm ab. Könnte mir jemand bitte sagen wie ich solche fehler allgemein abfange, eine genau beschreibung würde mir sehr weiterhelfen.
:?:

BKempf 25. Sep 2004 07:52

Re: Fehler abfangen aber wie ?
 
Delphi-Quellcode:
try
  // Der Code, bei dem es krachen könnte
except
  // Das, was bei einer Exception passieren soll
end;
Als Ursache für den konkreten Fehler vermute ich ein StrToInt oder was ähnliches, dem ein leerer String (z.B. Edit2.Text='', da noch nichts eingetragen wurde) übergeben wurde.

Edit: Tippfehler korrigiert.

ipworks 25. Sep 2004 08:16

Re: Fehler abfangen aber wie ?
 
Hallo siehe das Beispiel von BKempf.
Damit hast Du das Grundgerüst.

Nun kannst Du entweder alle Exceptions abfangen, wie bei BKempf geschieben,oder du behandelst unterschiedliche Exceptions mit unterschiedlichen Routinenen:

Delphi-Quellcode:
try
try
  // Der Code, bei dem es krachen könnte
except on EConvertError do   //für Konvertierungsfehler
  begin
  // Bsp: aaaa ist kein Integer
  end;
end;

except //für alle anderen Exceptions
  begin
  // Das, was bei einer Exception passieren soll
  end;
end;
Im Zweifel setz' doch mal den Code hier rein.
Viel Spass.
Peter

ACID-1 25. Sep 2004 08:46

Re: Fehler abfangen aber wie ?
 
Habe es mit eurer erklärung versucht, aber trotzdem bekomme ich die Fehlermeldung. Hier ist mein derzeitiger quellcode, könnt ihr mir sagen woran es liegt.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActnList;

type
  TForm1 = class(TForm)
    LOHM: TLabel;
    EOHM1: TEdit;
    Label2: TLabel;
    EWATT1: TEdit;
    EVOLT1: TEdit;
    START1: TButton;
    EAMPER1: TEdit;
    LSTROM1: TLabel;
    LSPANNUNG1: TLabel;
    procedure START1Click(Sender: TObject);
   
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.START1Click(Sender: TObject);
Var AOHM1,AWATT1,U1,I1,ohmges,wattges,uges,iges:real;
Var Watttest1,Ohmtest1,Utest1,Itest1:real;
begin
try
AOHM1:=strtofloat(EOHM1.Text);
except on EConvertError do
begin
AOHM1:=0;
end;
end;
try
AWATT1:=strtofloat(EWATT1.Text);
except on EConvertError do
begin
AWATT1:=0;
end;
end;
try
U1:=strtofloat(EVOLT1.Text);
except on EConvertError do
begin
U1:=0
end;
end;
try
I1:=strtofloat(EAMPER1.Text);
except on EConvertError do
begin
I1:=0;
end;
end;




  //Eingabe




  //Prüfen

  If AOHM1<>0 then

    IF AWATT1<>0 then
      uges:=sqrt(AOHM1*AWATT1);
      iges:=sqrt(AOHM1/AWATT1);
    IF U1<>0 then
      wattges:=(U1*U1)/AOHM1;
      iges:=sqrt(AOHM1/AWATT1);
    IF I1<>0 then
      wattges:=(I1*I1)*AOHM1;
      uges:=sqrt(AOHM1*AWATT1);
   




//Ausgabe
EVOLT1.Text:=floattostr(uges);
EAMPER1.Text:=floattostr(iges);
  end;



end.
[edit=Admin]Hallo und herzlich Willkommen in der Delphi-PRAXiS. :dp: Ich habe Deinen Quellcode in sog. Delphi-Tags gesetzt: [delphi]...[/delphi]. Bitte künftig aufgrund der Übersichtlichkiet selber machen. Danke. ;-) Mfg, Daniel[/edit]

ipworks 25. Sep 2004 09:41

Re: Fehler abfangen aber wie ?
 
Vergleiche jenes mit deiner Routine

Delphi-Quellcode:
procedure TForm1.START1Click(Sender: TObject);
var
AOHM1,AWATT1,U1,I1,ohmges,wattges,uges,iges:Extended;
Watttest1,Ohmtest1,Utest1,Itest1:Extended;
begin
  AOHM1:=StrToFloatDef(EOHM1.Text,0); //falls Fehler stellt StrtoFloatDef automatisch das Ergebnis 0
  AWATT1:=StrToFloatDef(EWATT1.Text,0);
  U1:=StrToFloatDef(EVOLT1.Text,0);
  I1:=StrToFloatDef(EAMPER1,0);

  if AOHM1<>0 then begin
    if AWATT1<>0 then begin
      uges:=sqrt(AOHM1*AWATT1);
      iges:=sqrt(AOHM1/AWATT1);
      end;
    if U1<>0 then begin
      wattges:=(U1*U1)/AOHM1;
      iges:=sqrt(AOHM1/AWATT1);
      end;
    if I1<>0 then begin
      wattges:=(I1*I1)*AOHM1;
      uges:=sqrt(AOHM1*AWATT1);
      end;
  end;

  //Ausgabe
  EVOLT1.Text:=floattostr(uges);
  EAMPER1.Text:=floattostr(iges);
end;
cu
Peter

ACID-1 25. Sep 2004 10:00

Re: Fehler abfangen aber wie ?
 
Tausend Dank für die hilfe, hat super funktioniert. Werde mir mal strtofloatdef genauer anschauen. Aber warum hat es nicht mit try und except funktioniert?

ipworks 25. Sep 2004 10:07

Re: Fehler abfangen aber wie ?
 
Prüfe doch mal deine if...then routinen.
Da fehlen z.B. einige begin und
Delphi-Quellcode:
end
.
Noch so ein Tip.
Achte auf die Syntax und die Einrückungen. Ansonsten wird's doch sehr unübersichtlich.
mfg
Peter

jfheins 25. Sep 2004 10:19

Re: Fehler abfangen aber wie ?
 
Zitat:

Zitat von ACID-1
Aber warum hat es nicht mit try und except funktioniert?

Auch wenn du mit try ... except - Blöcken arbeitest, werden in der Entwicklungsumgebung die Fehler angezeigt. Erst wenn du das Programm nicht mehr aus der IDE heraus startest, sondern durch ausühren der Ausgabedatei, werden die Fehlermeldungen nicht mehr angezeigt ... :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 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