![]() |
Exception wird nicht angezeigt
Hi,
Delphi-Quellcode:
Eigentlich sollte doch die Exception angezeigt werden, aber die kommt nicht. Es wird in den Except-Block gesprungen, dann steht der Debugger auf "DoError" und überspingt das dann einfach, wenn ich wieder F7 drück.
uses
xmldom, XMLIntf, msxmldom, XMLDoc, SysUtils; type EXMLException = Exception; ... // Eine Procedure try FXML.LoadFromFile(FFileName); // Hier passiert ein Fehler except DoError('Datei "%s" konnte nicht geladen werden!' + #13#10 + 'Bitte überprüfen Sie den Pfad!', [FFilename]); end; ... procedure TXML.DoError(M: String; const Args: array of const); begin EXMLException.Create(Format(M, Args)); end; Der Code steht in einer Unit (ohne eine DFM). :hi: Danke schon ma im Vorraus ;) |
Re: Exception wird nicht angezeigt
Ich denke mal nur eine neue Exception erstellen reicht nicht. Du mußt dies dann auch "werfen" (mit raise).
|
Re: Exception wird nicht angezeigt
Hi,
Delphi-Quellcode:
geht leider auch nicht.
raise EXMLException.Create('Kann Datei nicht laden!');
Der Code steht im except-block. |
Re: Exception wird nicht angezeigt
Hi,
erstmal musst Du das auf jeden fall mit Raise schreiben. Zudem würde ich eine Exception class immer so deklarieren (habe ich bisher nur so gesehen):
Delphi-Quellcode:
mfG
type
EXMLException = class(Exception) end; mirage228 |
Re: Exception wird nicht angezeigt
Zitat:
jetzt bekomme ich, wenn ich durchsteppe, eine Meldung, aber, wenn ich das Programm so starte, bekomme ich diese nicht. |
Re: Exception wird nicht angezeigt
Hi,
mein Testcode funktioniert ohne Beanstandungen:
Delphi-Quellcode:
mfG
type
ENewException = class(Exception) end; procedure RaiseError(const msg: string); begin raise ENewException.Create(Msg); end; procedure TForm1.FormCreate(Sender: TObject); var Obj: TStringList; begin try Obj := nil; Obj.Text := 'neu'; except RaiseError('schwära fäla'); end; end; mirage228 |
Re: Exception wird nicht angezeigt
Da du immer nur so Bruchstücke vom Code zeigst und man irgenwie nichts zusammenhängendes zu sehen bekommt, hier mal ein beispiel, wie man eine eigene Exception wirtft und behandelt.
Delphi-Quellcode:
type
EInvalidPW = class(Exception); const PASSWORD = 'test'; procedure CheckPWD(Pwd: String); resourcestring rsInvalidPw = 'Passwort %s ist ungültig'; begin if Pwd <> PASSWORD then raise EInvalidPW.CreateFmt(rsInvalidPw, [Pwd]); end; procedure TForm1.Button1Click(Sender: TObject); begin try CheckPWD('tset'); except on E: EInvalidPW do ShowMessage(E.Message); end; end; |
Re: Exception wird nicht angezeigt
Hi,
ich hab das Projekt ma an den mirage228 geschickt. Es ging keine Minute da hatte er die Lösung:
Delphi-Quellcode:
constructor TXML.Create(FileName: String; NodeName: String;
CreateIfNotExists: Boolean); var Temp: IXMLDocument; begin FFileName := FileName; if CreateIfNotExists then begin if (not (FileExists(FFileName))) then begin TFileStream.Create(FFilename, fmCreate).Free; try with TStringList.Create do begin Add(Format('<%s>', [NodeName])); Add(Format('</%s>', [NodeName])); SaveToFile(FFilename); Free; end; except DoError('Fehler beim erstellen der Datei "%s"!', [FileName]); end; end; end; FXML := nil; // << Das hier hat gefehlt. Wenn man das weglässt, zeigt es die Exception NICHT an. try FXML := TXMLDocument.Create('G'); FXML.LoadFromFile(FFileName); if (not (FXML.DocumentElement.NodeName = NodeName)) then DoError('Node "%s" nicht gefunden!', [NodeName]); except DoError('Datei "%s" konnte nicht geladen werden!' + #13#10 + 'Bitte überprüfen Sie den Pfad!', [FFilename]); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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