![]() |
"Delphi"-Exceptions verhindern
Hi,
ich habe folgende Exception geschrieben:
Delphi-Quellcode:
wie kann ich jetzt proggen, dass das Programm, wenn ich es auf IDE-Basis, d.h. nicht von Delphi ausgehend (=> F9) starte, nur noch meine eigene Exception anzeigt, und nicht auch noch die Exception, die das Programm bei einem Fehler normalerweise anzeigt; die ist nämlich für den Anwender sehr unverständlich :mrgreen: ;
try
mediaplayer1.Open; except MessageBox(0,'Fehler beim Laden der Datei','Datei kann nicht geladen werden',16); FileLoad1.FileName := ''; mediaplayer1.Open; end; Gruss DelphiUser7 |
Re: "Delphi"-Exceptions verhindern
Hallo,
mediaplayer1.Open; aus dem except Abschnitt rausnehmen. |
Re: "Delphi"-Exceptions verhindern
try
.. except on e.exception do begin QUELLCODE FÜR EXCEPTION end; end; So müsste es glaub ich gehen |
Re: "Delphi"-Exceptions verhindern
Delphi-Quellcode:
:hi:
procedure TForm1.HandleMCIDeviceError;
begin ShowMessage('Mist!'); Form1.MediaPlayer1.Close; end; procedure TForm1.Button1Click(Sender: TObject); begin try MediaPlayer1.Open; except on E: EMCIDeviceError do HandleMCIDeviceError; end; end; |
Re: "Delphi"-Exceptions verhindern
Hi,
entschuldigung, dass ich nochmal poste, aber da ist noch ein Problem aufgetaucht: Die Sache mit der vom Programm erstellten Exception hab ich mittlerweile in den Griff bekommen :) , aber was kommt danach :?: ; ich meine, der Anwender muss ja früher oder später auch mal eine Datei öffnen können, nachdem er einen Dateinamen falsch eingegeben hat; das heißt also im Klartext :arrow: Ich möchte wissen, wie man den ÖffnenDialog noch 'am Leben erhalten' kann, bis der Benutzer entweder auf 'Abbrechen' klickt, oder eine Datei öffnet; Hoffe, ihr versteht mein Problem; Mein Quelltext sieht momentan folgendermaßen aus:
Delphi-Quellcode:
Jetzt die beiden Fehlerbehandlungsroutinen:
try
mediaplayer1.Open; except HandleMCIDeviceError; try fileLoad1.Execute; except on E: EMCIDeviceError do HandleMCIDeviceError2; end; end;
Delphi-Quellcode:
procedure TForm1.HandleMCIDeviceError;
begin ShowMessage('Datei kann nicht geöffnet werden!'+#13+'Player wurde nicht geöffnet!'); Form1.MediaPlayer1.Close; end; procedure TForm1.HandleMCIDeviceError2; begin ShowMessage('Es wurde keine Datei geladen!'); end; |
Re: "Delphi"-Exceptions verhindern
Hallo? Seid ihr noch da?
|
Re: "Delphi"-Exceptions verhindern
Zitat:
Tom der glaubt sich daran erinnern zu können, dass es hier kein Antwortzwang gibt. |
Re: "Delphi"-Exceptions verhindern
So wird der Opendialog so lange angezeigt, bis eine gültige Datei ausgewählt wurde, oder der Anwender auf abbrechen geklickt hat.
Ne elegantere Lösung ist mir auf die schnelle nicht eingefallen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var UserCanceled: Boolean; begin MediaPlayer1.Filename := ''; repeat UserCanceled := not OpenDialog1.Execute; if not UserCanceled then begin try MediaPlayer1.FileName := OpenDialog1.FileName; MediaPlayer1.Open; except on E: EMCIDeviceError do begin ShowMessage(ExtractFileName(OpenDialog1.Filename) + ' konnte nicht geöffnet werden!'); MediaPlayer1.Filename := ''; UserCanceled := false; end; end; end; until (Length(MediaPlayer1.FileName) > 0) OR UserCanceled; end; |
Re: "Delphi"-Exceptions verhindern
@ Tom;
natürlich nicht, aber wozu ist denn ein Forum sonst da, als um 'Infos' auszutauschen; hat ja auch niemand gesagt, dass IHR eine Antwort auf meine Frage haben MÜSST; Antwortzwang, dieses Wort existiert, soweit ich weiß, überhaupt nicht im Deutschen Wörterbuch, aber ich weiß natürlich trotzdem, was gemeint ist; :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: @ Wormid; Erst mal danke für den SourceCode, aber ein Problem besteht immer noch: WENN man auf 'Abbrechen' klickt, DANN zeigt das Programm immer noch an: 'Es konnte kein MCI-Gerät geöffnet werden!' bzw. als Exception: 'Kein MCI-Gerät geöffnet!'; Und weiterarbeiten kann das Programm damit natürlich schlecht!; Außerdem wird der OpenDialog 2 Mal angezeigt, und erst nach dem 2. Mal nimmt er die Eingabe an; :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: DelphiUser7 |
Re: "Delphi"-Exceptions verhindern
öhmmmm.....warum nicht einfach im Open-Dialog in den Optionen
PathMustExist=True FileMustExist=True Dann kommt der erst garnicht raus ohne eine Gültige Datei gewählt zu haben (mit entsprechenden filtern kannst du sogar den typ feststellen !) |
Re: "Delphi"-Exceptions verhindern
versuchs mal mit Application.OnException (Beispiel gibts in der Delphi Hilfe). Dort kannst über die E: Exception Variable auf die Nachricht der Exception zugreifen und diese anzeigen oder halt auch deine eigene Nachricht.
mfG mirage228 |
Re: "Delphi"-Exceptions verhindern
Moin DelphiUser,
ausserdem könnte man auch einfach das OnCanClose Ereignis des Dialoges benutzen:
Delphi-Quellcode:
procedure TForm1.OpenDialog1CanClose(Sender: TObject;
var CanClose: Boolean); begin try MediaPlayer1.FileName := OpenDialog1.FileName; MediaPlayer1.Open; except MediaPlayer1.FileName := ''; ShowMessage('KEINE GÜLTIGE DATEI'); CanClose := false; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if not OpenDialog1.Execute then exit; end; |
Re: "Delphi"-Exceptions verhindern
@ Christian Seehase;
Vielen Dank!; Das war die Lösung aller Probleme!; Gruss DelphiUser7 |
Re: "Delphi"-Exceptions verhindern
@ Christian Seehase
:shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: Nein, leider doch nicht; eins, aber auch nur ein einziges Problemchen gibt es noch: der OpenDialog öffnet jetzt nur bei jedem 2. Anlauf; hast du eine Erklärung dafür?, ich meine: immerhin hast du den Source ja gepostet :mrgreen: :mrgreen: ; MfG DelphiUser7 |
Re: "Delphi"-Exceptions verhindern
Moin DelphiUser,
ich weiss ja nicht, was Du sonst noch so alles in Deinem Programm drinhast, aber bei mir funktioniert's. |
Re: "Delphi"-Exceptions verhindern
Sorry, dass ich noch mal poste :( , aber da hat sich eines noch nicht geklärt: Was macht der OpenDialog bzw. der Mediaplayer, wenn ich schon mal eine Datei geöffnet habe, und dann einen ungültigen Dateinamen eingebe?; bei mir ist es nämlich so, dass er dann eine Meldung wie 'Kein MCI-Geraet geöffnet' oder so anzeigt :evil: ; diese Meldung wird nur dann nicht angezeigt, wenn noch keine Datei geöffnet wurde!;
Es wäre nett, wenn ihr mir helft, dieses letzte Problemchen aus der Welt zu schaffen :mrgreen: ; MFG DelphiUser7 |
Re: "Delphi"-Exceptions verhindern
So wie ich das sehe, weiss keiner eine Antwort :cry: :cry: ;
eigentlich müsste der OpenDialog ja auch funktionieren, immerhin stammt der Code von einem Super-Moderator; dann muss der Fehler wohl bei mir liegen; aber ich seh da keinen, und alle die ich gesehen habe, hab ich beseitigt; hier noch ein letzter verzweifelter Versuch :mrgreen: mit dem Posten von Source; OnCanClose von OpenDialog:
Delphi-Quellcode:
'Datei Öffnen'-Button:
procedure TForm1.fileLoad1CanClose(Sender: TObject; var CanClose: Boolean);
begin try Mediaplayer1.FileName := FileLoad1.FileName; mediaplayer1.Open; except Mediaplayer1.FileName := ''; ShowMessage('Keine gültige Datei ausgewählt!'); CanClose := false; end; end;
Delphi-Quellcode:
DelphiUser7, der weiss das es hier keinen Antwortzwang gibt! :wink: ;
procedure TForm1.BitBtn6Click(Sender: TObject);
begin with fileLoad1 do begin Filter := 'mp3-Files(*.mp3)|*.mp3|Wav-Files(*.wav)|*.wav|MIDI-Files(*.mid)|*.mid|Alle Audiodateien(*.mp3,*.wav,*.mid)|*.mp3;*.wav;*.mid'; end; if fileLoad1.Execute then begin Ticks; TrackPane; newplaylist := TStringList.Create; mylabel.Enabled := true; myLabel.Caption := fileLoad1.FileName; c := PlayListBox.Items.Count; newplaylist.Add(fileLoad1.FileName); PlayListBox.Items.Clear; PlayListBox.Items.AddObject('PlayList001', newplaylist); PlayL1.Items.Count; if PlayL1.Items.Count = -1 then begin ClearSel1.Enabled := false; end else begin ClearSel1.Enabled := true; end; if not PlayL1.Items.Count = -1 then begin newplaylist.clear; newplaylist.Add(fileLoad1.fileName); end; PlayL1.Clear; PlayL1.Items.Assign(newplaylist); PlayListBox.ItemIndex := 0; PlayL1.ItemIndex := 0; ButtonsEnable; mediaplayer1.FileName := fileLoad1.FileName; MEDIAPLAYER1.OPEN <------ hab ich entfernt, weil ich dachte, es liegt daran, dass er irgendwie // versucht, eine Datei zu öffnen!; hat aber nichts geändert; mediaplayer1.Play; Stunden:=0; Minuten:=0; Sekunden:=0; Timer1.Enabled := True; MouseTrackBar1.Enabled := true; end else begin Exit; end; end; |
Re: "Delphi"-Exceptions verhindern
Moin DelphiUser,
als erstes könntest Du mal im OnCanClose des OpenDialoges als erste Zeile hinter try noch ein MediaPlayer1.Close hinzufügen. Anschliessend setz mal auf diese Zeile einen Breakpoint, und geh' mal im Einzelschritt (F7) durch den Code, sobald das Programm auf den Breakpoint gelaufen ist. Dann können wir mal einkreisen, wo der Fehler ausgelöst wird. |
Re: "Delphi"-Exceptions verhindern
Der Fehler wird bei mediaplayer1.Open im try-Bereich des OnCanClose-Ereignisses ausgelöst; der Pfeil nebendran zeigt zumindest in diese Zeile;
MFG DelphiUser7 |
Re: "Delphi"-Exceptions verhindern
Moin DelphiUser,
von da aus geht er also in den Except Zweig!? Hätte ja bei einer ungültigen Datei durchaus seine Berechtigung, und ist gewollt, weil dann ja der Dialog nicht geschlossen werden darf. |
Re: "Delphi"-Exceptions verhindern
Ja, genau von da aus geht der except-Zweig!;
Aber genau deswegen hab ich doch die Exception erstellt, damit Delphi nicht immer seine eigenen nervigen Exceptions anzeigt!; das Problem tritt ja auch, wie ich schon beschrieben habe, nur dann auf, wenn schon mal eine Datei geöffnet wurde!; Ausserdem ist ja die Exception an sich kein so großes Problem, sondern, dass er die Exception, sobald man auf OK geklickt hat, immer wieder anzeigt; noch härter kommt es dann allerdings auf der Windows IDE-Ebene, da er da immer wieder die Exception anzeigt, ohne irgendwelche Einflüsse vom Benutzer aus; |
Re: "Delphi"-Exceptions verhindern
Moin DelphiUser,
wenn Du die Anzeige der Exception in der IDE nicht abschaltest, wirst Du die dort immer sehen. (Tools\Debugger Optionen\Sprach-Exceptions CheckBox: Bei Delphi-Exceptions stoppen) Zitat:
Von alleine passiert ja eigentlich nichts. |
Re: "Delphi"-Exceptions verhindern
Danke,
der Timer war der 'Übeltäter'; glaubst du, es reicht, wenn ich einfach in den except-Abschnitt 'timer1.enabled := false' reinschreibe; so funktioniert es nämlich; und der Timer wird ja eh reaktiviert, sobald ein neuer Song beginnt zu spielen; DelphiUser7 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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