AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Unterschiede showmessage und raise Exception.Create
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschiede showmessage und raise Exception.Create

Ein Thema von ferby · begonnen am 7. Mär 2006 · letzter Beitrag vom 9. Mär 2006
Antwort Antwort
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#1

Unterschiede showmessage und raise Exception.Create

  Alt 7. Mär 2006, 19:31
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Unterschiede showmessage und raise Exception.Create

  Alt 7. Mär 2006, 19:42
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.
Markus Kinzler
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: Unterschiede showmessage und raise Exception.Create

  Alt 8. Mär 2006, 15:09
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
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#4

Re: Unterschiede showmessage und raise Exception.Create

  Alt 8. Mär 2006, 15:50
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#5

Re: Unterschiede showmessage und raise Exception.Create

  Alt 9. Mär 2006, 17:52
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:25 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