Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unterschiede showmessage und raise Exception.Create (https://www.delphipraxis.net/64751-unterschiede-showmessage-und-raise-exception-create.html)

ferby 7. Mär 2006 19:31


Unterschiede showmessage und raise Exception.Create
 
Hallo,

Ich habe bis jetzt Fehlermeldungen so den Benutzer gezeigt:

Delphi-Quellcode:
var
  Form1: TForm1;

const
  fehler1='Fehler #1: BlaBla!';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(fehler1);
end;
Jetzt habe ich vor kurzen einen Quellcode gefunden der die Fehlermeldungen so erzeugt:


Delphi-Quellcode:
var
  Form1: TForm1;

const
  fehler1='Fehler #1: BlaBla!';

implementation

{$R *.dfm}

procedure Error(const ErrMsg: string);
begin
  raise Exception.Create(ErrMsg);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  error(fehler1);
end;
Die zwei unterschiede die mir aufgefallen sind ist das ein Ton bei der Fehlermeldung kommt und das ein rotes x bei der "Textbox" daneben ist.

Ich wollte jetzt wissen ob es noch weitere Unterschiede zwischen den beiden Varianten gibt die ich nicht bemerkt habe.
Oder waren das schin die einzigen Unterschiede?


Ferby

mkinzler 7. Mär 2006 19:42

Re: Unterschiede showmessage und raise Exception.Create
 
Im ersten Fall gibst du ein normales Meldungsfenster aus, welches eine Fehlermeldung ausgibt. das Programm läuft weiter.
Im 2. Fall erzeugt du einen Exception, auf die dann das BS mit einer Meldung reagiert. ween du diese nicht abfängst wird das Programm dann beendet.

ferby 8. Mär 2006 15:09

Re: Unterschiede showmessage und raise Exception.Create
 
Hallo,

ich verstehe deine Erklärung nicht:

1) auf die dann das BS mit einer Meldung reagiert...

Die Meldung schreibe ich ja selbst? Was für eine Meldung soll das BS anzeigen wenn ich selbst eine exeption erstelle

2) wen du diese nicht abfängst wird das Programm dann beendet.
Wiso soll ich meine eigene Meldung abfangen???? Warum soll das Programm beendet werden, wenn ein Fehler auftrit dann wird das Programm fast nie beendet ???

Oder versteh ich da was nicht?

Ferby

JasonDX 8. Mär 2006 15:50

Re: Unterschiede showmessage und raise Exception.Create
 
Na ja, um den Unterschied etwas anders zu erklären: Das mit dem ShowMessage ist nur eine Mitteilung: "Es is was schiefgelaufen". Einfach nur, damit der Benutzer weiß, ob was geht oder nicht.
Exceptions sind da schon eine Stufe umfangreicher und geschickter:
Exceptions sind nämlich nicht nur dazu da, um Fehler anzuzeigen, sondern generell zu sagen: "Da isn Fehler". Von welchem Typ die Exception ist kann dann zeigen, welcher Fehler aufgetreten ist.
Um mal ein Beispiel zu nennen:
Du hast eine Liste mit 10 Elementen und der Benutzer will auf ein Element davon zugreifen. D.h. er kann jetzt auf das erste, dritte, oder hundertste zugreifen wollen.
Mit der ersten Variante wärs dann so:
Delphi-Quellcode:
function TMeineListe.GetElement(index: integer);
begin
  //wenn index nicht gültig dann
    Showmessage('dieses Element gibts nicht.');
end;

//und irgendwo in deiner Applikation:
  MeineListe.GetElement(100);
1. es wird von TList vorbestimmt, was mit dem Fehler passiert.
und 2. hast du dann beim Aufruf keine Ahnung, dass was schiefgelaufen is.
Mit Exceptions siehts etwas anders aus:
Delphi-Quellcode:
function TMeineListe.GetElement(index: integer);
begin
  //wenn index nicht gültig dann
    raise Exception.Cretae('dieses Element gibts nicht.');
end;

//und irgendwo in deiner Applikation:
  try
    MeineListe.GetElement(100);
  except
    ShowMessage('Dieses Element gibts net....');
  end;
Hier kriegst du 1. mit, wenn etwas schiefgelaufen is
2. bestimmst du selbst, was nach einem Fehler passiert, und kannst weitere Konsequenzen ziehn (Liste freigeben, dem user nen Stromschlag geben ect.)
Es steht dir natürlich auch frei, die in TMeineListe.GetElement geworfene Exception nicht abzufangen. Dann wird eben die Typische Meldung angezeigt, vonwegen "Project Soundso raised exception class Exception with message 'was issn überhaupt schiefgegangen?'" ect.
Exceptions sind eben eine bereits implementierte, und nicht ungeschickte Lösung zur Fehlerbehandlung, die der ShowMessage-Variante vorzuziehn sind.

greetz
Mike

ferby 9. Mär 2006 17:52

Re: Unterschiede showmessage und raise Exception.Create
 
Hallo,

danke, jetzt hab ich's kapiert... glaub ich zumindest :)

Jetzt versteh ich das auch mit dem Programm abbrechen wenn eine expetion ausgelöst wird....


ich habe mir in der zwischenzeit eine neue Lösung gebastelt und werde die wahrscheinlich verwenden,
denn da kenn ich mich 100% aus und es ist das was ich will

Delphi-Quellcode:
  MessageBeep(MB_ICONERROR);
  MessageDlg(ErrMsg, mtError , [mbOK], 0);

Ferby


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 Uhr.

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