Hallo,
wenn ich das richtig verstehe, möchtest Du in Abhängigkeit eines Parameters einen Open- oder Save-Dialog erstellen und anzeigen. Die sauberste Lösung besteht darin, einen Aufzählungstypen für diesen Parameter zu definieren:
Delphi-Quellcode:
type
TDialogType = (dtOpen, dtSave);
procedure Tserver_mainform_form.ExecuteDialog(AOnCanClose: TCloseQueryEvent; AType: TDialogType);
var lOpenDialog : TOpenDialog;
lSaveDialog : TSaveDialog;
begin
case AType
of
dtOpen:
begin
lOpenDialog := TOpenDialog.Create(server_mainform_form);
try
lOpenDialog.DefaultExt := '
xml';
lOpenDialog.Filter := '
XML File / xml|*.xml';
lOpenDialog.Title := '
Datei öffnen...';
lOpenDialog.OnCanClose := AOnCanClose;
lOpenDialog.Options := [ofHideReadOnly,ofFileMustExist,ofEnableSizing];
lOpenDialog.Execute;
finally
lOpenDialog.Free;
end;
end;
dtSave:
begin
lSaveDialog := TSaveDialog.Create(server_mainform_form);
try
lSaveDialog.DefaultExt := '
xml';
lSaveDialog.Filter := '
XML File / xml|*.xml';
lSaveDialog.Title := '
Speichern unter...';
lSaveDialog.OnCanClose := SaveDialog1CanClose;
lSaveDialog.Options := [ofOverwritePrompt,ofHideReadOnly,ofEnableSizing];
lSaveDialog.Execute;
finally
lSaveDialog.Free;
end;
end;
end;
// case AType
end;
Der Aufruf der Routine könnte dann so aussehen:
ExecuteDialog (DialogCanClose, dtOpen);
Drei Dinge sind mir noch aufgefallen:
1.) Beim Erzeugen eines Dialogs übergibst Du die Formularvariable als Eigentümer, "Self" oder "Nil" wären hier die bessere Wahl. Eine direkte Verwendung der Formularvariablen als Owner sollte man nach Möglichkeit vermeiden.
2.) Das (boolesche) Ergebnis des Execute-Aufrufs wird von Dir nicht ausgewertet. Wie erfährst Du nun, ob der Benutzer den Dialog abgebrochen oder seine Eingabe bestätigt hat?
3.) Den OnCanClose-Handler für den Open-Dialog möchtest Du als Parameter übergeben, beim Save-Dialog wird ein fester Wert benutzt. Existieren beide Dialog vielleicht schon beim Aufruf der Routine? In diesem Fall wäre das erneute Erzeugen innerhalb der Routine wahrscheinlich überflüssig.
Gruß Hawkeye