Entwickler-Ecke

Dateizugriff - Probleme mit TOpenDialog


Rekursion - Di 12.10.10 15:46
Titel: Probleme mit TOpenDialog
Hi ich habe folgenden Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button2Click(Sender: TObject);
var opf1 : TOpenDialog;
begin
  opf1 := opf1.Create(self);
  opf1.Title := 'Waehlen Sie die zu analysierende Chunk-Datei aus';
  opf1.InitialDir := 'c:\';
  opf1.Options := [ofFileMustExist];
  opf1.Filter := 'Szenen-Dateien (*.scnd)|*.scnd|Alle Dateien (*.*)|*.*';
  opf1.FilterIndex := 1;
  opf1.Execute;
  Datei := opf1.FileName;
  opf1.Free;
end;


Datei soll eine globale Variable (AnsiString) sein.

Da bekomme ich immer eine Zugriffsverletzung. Was mache ich falsch? Der OpenDialog erscheint nie, dafür fehlt nach der Fehlermeldung der Button auf meinem Formular, den löscht es zur
Laufzeit einfach raus!

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Tropby - Di 12.10.10 15:50

Probier mal

Delphi-Quelltext
1:
opf1 := TOpenDialog.Create(self);                    

anstatt

Delphi-Quelltext
1:
opf1 := opf1.Create(self);                    


Dann sollte es gehen.


Dude566 - Di 12.10.10 15:51

Warum erzeugst du deinen OpenDialog denn überhaupt manuell, die weiteren Einstellungen kann man doch auch so angeben oder?


Gausi - Di 12.10.10 15:51

Das Erzeugen einer dynamischen Komponente zur Laufzeit geht so:

Delphi-Quelltext
1:
opf1 := TOpenDialog.Create(nil);                    

Als Owner sollte man iirc auch Nil angeben, wenn man die Komponente selbst wieder zerstört.


Rekursion - Di 12.10.10 15:53

Danke, jetzt funktioniert es tatsächlich.


elundril - Di 12.10.10 22:58

Ist keiner draufgekommen das es Probleme geben kann wenn man den Rückgabewert von Opendialog.Execute überprüfen sollte? Sonst könnte es ev. böse Probleme geben. also immer brav


Delphi-Quelltext
1:
2:
3:
4:
  if opf1.Execute then
    // Jetzt das was gemacht werden soll wenn eine datei ausgewählt wurde und auf OK gedrückt wurde
  else
    // Jetzt das was gemacht werden soll wenn der Benutzer auf Abbrechen o.ä. geklickt hat.


lg elundril