Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frage zu SaveDialog (https://www.delphipraxis.net/119763-frage-zu-savedialog.html)

Thomm 31. Aug 2008 07:55


Frage zu SaveDialog
 
Wenn jemand im Datei-Menü auf "Speichern" klickt

und keine Datei ausgewählt wurde , dann gibt es eine Exception

Ich hab das mit if OpenDialog1.FileName <>''

abgefangen , ist aber nicht besonders elegant

Delphi-Quellcode:
procedure TForm1.Speichern1Click(Sender: TObject);
begin
SaveDialog1.Options:= [ofOverwritePrompt];
if OpenDialog1.FileName <>''
then
Clientdataset1.Savetofile(OpenDialog1.FileName)
else
SaveDialog1.Execute
end;
Wie schreibt man das normalerweise ?

Matze 31. Aug 2008 08:04

Re: Frage zu SaveDialog
 
Hallo,

normalerweise schreibt man es so, um beim Klick auf "Abbrechen" keine Exception auszulösen:

Delphi-Quellcode:
if SaveDialog1.Execute then
  // "OK" geklickt
Wenn keine Datei gewählt wurde, sollte sich der Dialog dann auch nicht schließen.

Edit: Und den Dateinamen, den du beim OpenDialog gewählt hast, würde ich in einer Variablen speichern und dann auf diese zugreifen. Arbeite so wenig wie möglich "direkt" mit der VCL.

Grüße

Thomm 31. Aug 2008 08:20

Re: Frage zu SaveDialog
 
Ich glaube die Dateivariable speichert man mit

Delphi-Quellcode:
var f : File;
procedure TForm1.FormCreate(Sender:TObject);
begin

Assignfile(f,'c:.....\Datei.txt');
.
.
.
.
end;

grenzgaenger 31. Aug 2008 09:02

Re: Frage zu SaveDialog
 
nö, eigentlich eher so ....
Delphi-Quellcode:
var s: string;
 ...
  if od.execute then
    s := od.filename;
ist also eine ganz normale string var

Thomm 31. Aug 2008 09:16

Re: Frage zu SaveDialog
 
Das stimmt aber auch nicht ganz

Wenn man "Speichern" anklickt, dann sollte das SaveDialog1 nur ausgeführt werden,

wenn noch keine Datei geöffnet wurde ,ansonsten wird es in der Datei gespeichert,

die schon geöffnet ist.

Delphi-Quellcode:
procedure TForm1.Speichern1Click(Sender: TObject);
begin
if SaveDialog1.execute then
begin
SaveDialog1.Options:= [ofOverwritePrompt];
Clientdataset1.Savetofile (OpenDialog1.FileName);
end;
end;

Sharky 31. Aug 2008 09:20

Re: Frage zu SaveDialog
 
Hai Thomm,

du solltest die Options setzen bevor Du den Dialog mit .Execute aufrufst.

grenzgaenger 31. Aug 2008 09:22

Re: Frage zu SaveDialog
 
ausserdem speicherst du die daten unter einem anderen namen (opendialog) anstatt dem von user selektieren (savedialog)

DeddyH 31. Aug 2008 09:27

Re: Frage zu SaveDialog
 
Nochmal das angesprochene Prinzip:
Delphi-Quellcode:
type
  TMyForm = class(TForm)
  ...
  private
    FFilename: TFilename;
  ...
  end;

...

procedure TMyForm.FormCreate(Sender: TObject);
begin
  FFilename := '';
end;

procedure TMyForm.Datei_oeffnen;
begin
  if OpenDialog.Execute then
    FFilename := OpenDialog.Filename;
end;

procedure TMyForm.Datei_speichern;
begin
  if FFilename = '' then
    begin
      if SaveDialog.Execute then
        FFilename := SaveDialog.Filename;
    end;
  if FFilename <> '' then
    Speichern(FFilename); //z.B. TStrings.SaveToFile
end;

Thomm 31. Aug 2008 09:34

Re: Frage zu SaveDialog
 
jetzt funktionierts :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz