Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "Delphi"-Exceptions verhindern (https://www.delphipraxis.net/10629-delphi-exceptions-verhindern.html)

DelphiUser7 22. Okt 2003 13:51


"Delphi"-Exceptions verhindern
 
Hi,
ich habe folgende Exception geschrieben:
Delphi-Quellcode:
try
   mediaplayer1.Open;
  except
   MessageBox(0,'Fehler beim Laden der Datei','Datei kann nicht geladen werden',16);
   FileLoad1.FileName := '';
   mediaplayer1.Open;
  end;
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: ;

Gruss
DelphiUser7

Jens Schumann 22. Okt 2003 13:59

Re: "Delphi"-Exceptions verhindern
 
Hallo,
mediaplayer1.Open;
aus dem except Abschnitt rausnehmen.

Nalincah 22. Okt 2003 14:02

Re: "Delphi"-Exceptions verhindern
 
try
..
except
on e.exception do
begin
QUELLCODE FÜR EXCEPTION
end;
end;

So müsste es glaub ich gehen

Wormid 22. Okt 2003 14:05

Re: "Delphi"-Exceptions verhindern
 
Delphi-Quellcode:
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;
:hi:

DelphiUser7 23. Okt 2003 10:20

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:
try
    mediaplayer1.Open;
  except
    HandleMCIDeviceError;
   try
    fileLoad1.Execute;
   except
    on E: EMCIDeviceError do HandleMCIDeviceError2;
   end;
  end;
Jetzt die beiden Fehlerbehandlungsroutinen:

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;

DelphiUser7 23. Okt 2003 10:38

Re: "Delphi"-Exceptions verhindern
 
Hallo? Seid ihr noch da?

Tom 23. Okt 2003 10:42

Re: "Delphi"-Exceptions verhindern
 
Zitat:

Zitat von DelphiUser7
Hallo? Seid ihr noch da?

Ja.

Tom der glaubt sich daran erinnern zu können, dass es hier kein Antwortzwang gibt.

Wormid 23. Okt 2003 10:46

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;

DelphiUser7 23. Okt 2003 11:15

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

Ghostwalker 23. Okt 2003 12:18

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 !)

mirage228 23. Okt 2003 12:25

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

Christian Seehase 23. Okt 2003 12:27

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;

DelphiUser7 23. Okt 2003 12:57

Re: "Delphi"-Exceptions verhindern
 
@ Christian Seehase;
Vielen Dank!;
Das war die Lösung aller Probleme!;

Gruss
DelphiUser7

DelphiUser7 23. Okt 2003 17:57

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

Christian Seehase 23. Okt 2003 18:03

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.

DelphiUser7 30. Okt 2003 22:09

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

DelphiUser7 31. Okt 2003 10:40

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:
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;
'Datei Öffnen'-Button:
Delphi-Quellcode:
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;
DelphiUser7, der weiss das es hier keinen Antwortzwang gibt! :wink: ;

Christian Seehase 31. Okt 2003 11:42

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.

DelphiUser7 31. Okt 2003 11:57

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

Christian Seehase 31. Okt 2003 12:22

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.

DelphiUser7 31. Okt 2003 12:31

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;

Christian Seehase 31. Okt 2003 12:39

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:

Zitat von DelphiUser7
da er da immer wieder die Exception anzeigt, ohne irgendwelche Einflüsse vom Benutzer aus;

könnte das an dem Timer liegen?
Von alleine passiert ja eigentlich nichts.

DelphiUser7 31. Okt 2003 13:48

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 06: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