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