Entwickler-Ecke

Dateizugriff - Opendialog. Fehler beim beenden


Gintonik - Di 27.03.07 16:50
Titel: Opendialog. Fehler beim beenden
Hallo, ich habe in meinem Programm mehrere Opendialoge. Ich kann die Dateien öffnen und er verarbeitet die auch. Mein Problem taucht auf, wenn ich den Dialog öffne, keine Datei wähle und auf abbrechen klicke. Dann kommt eine Fehlermeldung (Out of Bounds...). Wie kann ich die unterdrücken?

THX, Marcel


Christian S. - Di 27.03.07 16:53

Hallo!

Da ich nicht glaube, dass das ein Bug im OpenDialog selber ist, werden wir wohl die Prozedur sehen müssen, in der der OpenDialog aufgerufen wird, um Dir zu helfen. Sonst kann man da wenig zu sagen.

Grüße
Christian


Calculon - Di 27.03.07 16:53


Delphi-Quelltext
1:
2:
3:
try
except
end;

ist immer 'ne komfortable Lösung. Aber eigentlich dürfte dein Problem nicht auftreten, wenn du alles korrekt machst. Poste dochmal etwas Code.

Gruß

Calculon
--


Gintonik - Di 27.03.07 16:55

So greife ich auf meine Dateien zu...


Delphi-Quelltext
1:
2:
if OpenDialog1.Execute then
    F.LoadFromFile(OpenDialog1.FileName);


Christian S. - Di 27.03.07 16:57

Wenn der OpenDialog nicht mit "OK" beendet wird, ist F (was immer das genau ist ;-)) leer. Falls Du das nicht prüfst, kann es leicht passieren, dass Du auf einen Eintrag zugreifen willst, der gar nicht da ist.


Gintonik - Di 27.03.07 16:59

F ist ein zur LAufzeit erzeugtes Stringgrid
Hier ist der ganze Qualcode...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.LoadStringGridFromFile(StringGrid: TStringGrid);
var
  F: TStringList;
  i: Integer;
begin
  F := TStringList.Create;
  try
  if OpenDialog1.Execute then
    F.LoadFromFile(OpenDialog1.FileName);
    StringGrid.RowCount := StrToInt(F[0]);
    StringGrid.ColCount := StrToInt(F[1]);
    for i := 0 to (StringGrid.RowCount - 1do
      StringGrid.Rows[i].CommaText := F[i + 2];
  finally
    F.Free;
  end;
end;


JayEff - Di 27.03.07 16:59

user profile iconGintonik hat folgendes geschrieben:
So greife ich auf meine Dateien zu...


Delphi-Quelltext
1:
2:
if OpenDialog1.Execute then
    F.LoadFromFile(OpenDialog1.FileName);

Genau. Die Execute-Methode ist eine Funktion, deren Rückabewert ein Boolean-Wert ist. Sie gibt true zurück, wenn auf ok, und false, wenn auf Abbrechen gedrückt wurde.
Ist es garantiert, dass FileName leer ist, wenn man auf Abbrechen drückt, Christian? Ich glaube, wenn eine Datei ausgewählt ist, dann ist FileName auch im Abbrechen-Fall gleich dem Pfad der ausgewählten Datei.
Kann mich aber auch täuschen ;)


Gausi - Di 27.03.07 17:03

Da fehlen wohl begin...end ;-)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.LoadStringGridFromFile(StringGrid: TStringGrid);
var
  F: TStringList;
  i: Integer;
begin
  F := TStringList.Create;
  try
  if OpenDialog1.Execute then
  begin
    F.LoadFromFile(OpenDialog1.FileName);
    StringGrid.RowCount := StrToInt(F[0]);
    StringGrid.ColCount := StrToInt(F[1]);
    for i := 0 to (StringGrid.RowCount - 1do
      StringGrid.Rows[i].CommaText := F[i + 2];
  end;
  finally
    F.Free;
  end;
end;


jakobwenzel - Di 27.03.07 17:03

Da fehlt einfach nur ein Begin und ein End, damit der ganze Bereich nur ausgeführt wird, wenn der Dialog mit OK bestätigt wurde.


Gintonik - Di 27.03.07 17:08

Das isses Jungs, SUPER !!! Ich glaube ich brauche so langsam ne Brille ;-)