Autor Beitrag
avenger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Fr 13.03.09 03:28 
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 ?


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 1

WIN XP, WIN 7
Delphi 5 Ent, Delphi 2007 Pro, XE4
BeitragVerfasst: 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.

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: 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 an.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Fr 13.03.09 15:00 
Danke für die Infos

Problem gelöst und verstanden :D