Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Abbruch eines Save Dialog


avenger - Fr 13.03.09 03:28
Titel: Abbruch eines Save Dialog
Wenn ich das Richtig verstehe gibt der SaveDialog.execute beim klick auf Speichern True zurueck und beim klick auf abbrechen ein false. Wie kann ich mit dem If/Try Befehl abfangen das wenn ein False zurück kommt sprich abbrechen gedrückt wird mein Programm abstürzt ?



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm3.Speichern();

var
 StringList: TStringList;

 begin
  if savedialog1.Execute then
  StringList := TStringList.Create;
  try
  StringList.Add(Memo1.Text+Edit1.Text);

              if savedialog1.filterindex = 1
              then
              StringList.SaveToFile(SaveDialog1.FileName+'.txt')
              else
              if savedialog1.filterindex = 2
              then
              StringList.SaveToFile(SaveDialog1.FileName+'.ini')
              else
              
  finally
    StringList.Free;
  end;
end;


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Fr 13.03.2009 um 15:08


Andreas Schilling - Fr 13.03.09 08:06

Du hast das Create der Stringlist nur gemacht wenn mit "Speichern" der Dialog verlassen wure. Der Rest wurd immer gemacht, also war die Stringliste nicht da und Stringliste.add führt zu einer Zugriffsverletzung.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm3.Speichern();
  var StringList: TStringList;
begin
  if savedialog1.Execute then 
  begin // das ist neu
    StringList := TStringList.Create;
    try
      StringList.Add(Memo1.Text+Edit1.Text);

      if savedialog1.filterindex = 1
      then StringList.SaveToFile(SaveDialog1.FileName+'.txt')
      else
        if savedialog1.filterindex = 2
        then StringList.SaveToFile(SaveDialog1.FileName+'.ini');

    finally
      StringList.Free;
    end;
  end// das ist neu
end;


Marc. - Fr 13.03.09 12:06

Morgen,
Vorschlag: ein Case-Of würde hier IMHO die Übersicht um einiges steigern. ;)
Zudem verhindert korrektes Einrücken in solchen Fällen Fehler. Schau dir dazu mal das Tool DelForExp [http://www.aew.wur.nl/UK/Delforexp/] an.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm3.Speichern();
begin
  if Savedialog1.Execute then
  begin 
    with TStringList.Create do
    try
      Add(Memo1.Text  + Edit1.Text);

      case SaveDialog1.Filterindex of
         1: SaveToFile(SaveDialog1.FileName+'.txt');
         2: SaveToFile(SaveDialog1.FileName+'.ini');
         3: ...
      end;
    finally
      Free;
    end
  end,
end;

Grüße,
Marc


avenger - Fr 13.03.09 15:00

Danke für die Infos

Problem gelöst und verstanden :D