Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Sender: TSaveDialog or TOpenDialog

  Alt 16. Apr 2006, 10:31
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
  Mit Zitat antworten Zitat