Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.193 Beiträge
 
Delphi 12 Athens
 
#16

Re: SaveDialog und unzulässiger Dateiname

  Alt 13. Dez 2007, 14:08
so, Anhand des MSDN hab ich einfach mal die möglichen Rückgabewerte der Funktionen mit einfließen lassen.


bei einem "ungültigem" Dateinamen bricht OpenDialog/SaveDialog bzw. die verwendete WinAPI GetOpenFileName/GetSaveFileName ab und trägt den Fehler so ein, daß man ihn per CommDlgExtendedError abrufen kann.
In diesem Fall nennt sich der Fehler FNERR_INVALIDFILENAME.

Delphi-Quellcode:
// Alles auswerten
Uses Dialogs, CommDlg;

If OpenDialog1.Execute Then Begin
  If ofAllowMultiSelect in OpenDialog1.Options Then Begin
    Application.MessageBox(PChar(OpenDialog1.Files.Text), '');
  End Else Begin
    Application.MessageBox(PChar(OpenDialog1.FileName), '');
  End;
End Else
  Case CommDlgExtendedError of
    CDERR_STRUCTSIZE: Raise Exception.Create('OpenDialog - CDERR_STRUCTSIZE');
    CDERR_INITIALIZATION: Raise Exception.Create('OpenDialog - CDERR_INITIALIZATION');
    CDERR_NOTEMPLATE: Raise Exception.Create('OpenDialog - CDERR_NOTEMPLATE');
    CDERR_NOHINSTANCE: Raise Exception.Create('OpenDialog - CDERR_NOHINSTANCE');
    CDERR_LOADRESFAILURE: Raise Exception.Create('OpenDialog - CDERR_LOADRESFAILURE');
    CDERR_FINDRESFAILURE: Raise Exception.Create('OpenDialog - CDERR_FINDRESFAILURE');
    CDERR_LOADSTRFAILURE: Raise Exception.Create('OpenDialog - CDERR_LOADSTRFAILURE');
    CDERR_LOCKRESFAILURE: Raise Exception.Create('OpenDialog - CDERR_LOCKRESFAILURE');
    CDERR_MEMALLOCFAILURE: Raise Exception.Create('OpenDialog - CDERR_MEMALLOCFAILURE');
    CDERR_MEMLOCKFAILURE: Raise Exception.Create('OpenDialog - CDERR_MEMLOCKFAILURE');
    CDERR_NOHOOK: Raise Exception.Create('OpenDialog - CDERR_NOHOOK');
    FNERR_SUBCLASSFAILURE: Raise Exception.Create('OpenDialog - FNERR_SUBCLASSFAILURE');
    FNERR_INVALIDFILENAME: Raise Exception.Create('OpenDialog - FNERR_INVALIDFILENAME');
    FNERR_BUFFERTOOSMALL: Raise Exception.Create('OpenDialog - FNERR_BUFFERTOOSMALL');
    CDERR_DIALOGFAILURE: Raise Exception.Create('OpenDialog - CDERR_DIALOGFAILURE');
    Else Application.MessageBox('abgebrochen', '');
  End;
Delphi-Quellcode:
// in Kurz
Uses Dialogs, CommDlg;
Var E: LongWord;

If OpenDialog1.Execute Then Begin
  //Application.MessageBox(PChar(OpenDialog1.Files.Text), '');
  Application.MessageBox(PChar(OpenDialog1.FileName), '');
End Else Begin
  E := CommDlgExtendedError;
  Case E of
    CDERR_GENERALCODES: Application.MessageBox('Abgebrochen.', '');
    FNERR_INVALIDFILENAME: Application.MessageBox('Ungültiger Dateiname übergeben.', '');
    Else Raise Exception.Create('OpenDialog konnte nicht erstellt werden (FehlerCode $'
      + IntToHex(E, 4) + ').');
  End;
End;
Delphi-Quellcode:
// WinAPI in Kurz
Uses CommDlg;
Var OFN: TOpenFilename;
     E: LongWord;

If GetOpenFileName(OFN) Then Begin
  MessageBox(0, OFN.lpstrFile, '');
End Else Begin
  E := CommDlgExtendedError;
  Case E of
    CDERR_GENERALCODES: MessageBox(0, 'Abgebrochen.', '', MB_OK);
    FNERR_INVALIDFILENAME: MessageBox(0, 'Ungültiger Dateiname übergeben.', '', MB_OK);
    Else Raise Exception.Create(0, 'OpenDialog konnte nicht erstellt werden (FehlerCode $'
      + IntToHex(E, 4) + ').', MB_OK);
  End;
End;
> SaveDialog/GetSaveFileName haben die selben Rückgabewerte
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat