Delphi4: Fehler abfangen beim OpenDialog

Hallo. Wenn ich mit dem OpenDialog eine Datei öffnen möchte, mich aber dann entschließe, das lieber doch nicht zu tun und auf den ‚Abbrechen‘-Button haue, dann kommt eine ungewollte Fehlermeldung ‚Datei konnte nicht geöffnet werden!‘
Natürlich konnte sie dann nicht geöffnet werden, da ich ja auf den Abbrechen-Button gedrückt habe! Ich möchte, dass der Dialog sich dann aber einfach sang- und klanglos schließt, wie sich das gehört (z.B. wenn ich ein Word-Formular öffnen möchte usw.)

… ach und noch eine Frage: wenn ich den Save-Dialog verwende, möchte ich, dass die Dateien mit der entsprechenden Endung im Dialog erscheinen, welche SCHON GESPEICHERT SIND. Also: ich möchte eine test.txt abspeichern und beim Aufrufen des SaveDialogs sollen alle Dateien mit der Endung .txt angezeigt werden, welche schon im ausgewählten Verzeichnis vorhanden sind. Bei mir wird da im Moment nichts angezeigt, nur die Verzeichnissse.

danke und Gruß Jens.

Hi Jens!

Hallo. Wenn ich mit dem OpenDialog eine Datei öffnen möchte,
mich aber dann entschließe, das lieber doch nicht zu tun und
auf den ‚Abbrechen‘-Button haue, dann kommt eine ungewollte
Fehlermeldung ‚Datei konnte nicht geöffnet werden!‘

Mhh, überprüfst Du denn auch, ob der „OK“-Button und nicht der „Abbrechen“-Button gedrückt wurde? Wenn der „OK“-Button gedrückt wurde, ist das Ergebnis der Funktion „Execute“, mit der der Dialog aufgerufen wurde, TRUE, sonst FALSE (OK, das muß man wissen :smile:).

Du solltest die Sache also so angehen:

IF DialogOpen1.Execute THEN
 begin
 PerformFileOpening(DialogOpen1.FileName)
 end;

d. h. wenn "Abbrechen gedrückt wurde, passiert einfach gar nix, weil PerformFileOpening() nicht aufgerufen wird.

… ach und noch eine Frage: wenn ich den Save-Dialog verwende,
möchte ich, dass die Dateien mit der entsprechenden Endung im
Dialog erscheinen, welche SCHON GESPEICHERT SIND. Also: ich
möchte eine test.txt abspeichern und beim Aufrufen des
SaveDialogs sollen alle Dateien mit der Endung .txt angezeigt
werden, welche schon im ausgewählten Verzeichnis vorhanden
sind. Bei mir wird da im Moment nichts angezeigt, nur die
Verzeichnissse.

Verwende das Property „Filter“ des Dialogs. Nähere Infos zum Gebrauch findest Du in der Online-Hilfe.

Mit freundlichem Gruß
Martin

Hi Jens!

Hallo. Wenn ich mit dem OpenDialog eine Datei öffnen möchte,
mich aber dann entschließe, das lieber doch nicht zu tun und
auf den ‚Abbrechen‘-Button haue, dann kommt eine ungewollte
Fehlermeldung ‚Datei konnte nicht geöffnet werden!‘

Du könntest die Sache auch so angehen:

OpenDialog1.Execute ;
If OpenDialog1.FileName ‚‘ then
// hier wird überprüft,ob ein Dateiname eingegeben wurde
// wenn nicht, wird die nächste Funktion esrt garnicht aufgerufen (erst passiert gar nichts)

begin;
…Datei Speichern
end;
else
begin;
ShowMessage (‚Sie haben keinen Dateinamen eingegeben!‘);
end;

Hi Daniel!

Du könntest die Sache auch so angehen:

OpenDialog1.Execute ;
If OpenDialog1.FileName ‚‘ then
// hier wird überprüft,ob ein Dateiname eingegeben wurde
// wenn nicht, wird die nächste Funktion esrt garnicht
aufgerufen (erst passiert gar nichts)

begin;
…Datei Speichern
end;
else
begin;
ShowMessage (‚Sie haben keinen Dateinamen eingegeben!‘);
end;

Nein, ich muß Dir leider entschieden widersprechen! Wenn Du die Sache so angehst, wirst Du wenig Freude haben. Das Property „FileName“ einer „TOpenDialog“-Komponente enthält immer den zuletzt gehandelten Dateinamen. Folge: Wenn der „Abbrechen“-Button gedrückt wurde, ist der String im allgemeinen nicht leer (!), sondern in diesem Fall wird der String nicht verändert, was ja nicht dasselbe ist!

Du kannst das ganz einfach mit einem Button, einer Dialog-Komponente und einem Label ausprobieren. In den „ButtonClick“-Eventhandler schreibst Du lediglich:

begin
OpenDialog1.Execute;
Label1.Caption := OpenDialog1.FileName
end;

Das ist alles. Button drücken, Datei "Hallo.txt "auswählen, Dialog mit „OK“ schließen. Dann Button nochmal drücken, Datei „Wasistdenn.txt“ auswählen und Dialog jetzt mit „Abbrechen“ schließen. Der Labeltext bleibt dann auf „Hallo.txt“.

Nur die Abfrage des „Execute“-Ergebnisses (TRUE/FALSE) funzt (richtig). Sorry :wink:.

Mit freundlichem Gruß
Martin