![]() |
Delphi-Version: 7
Access Violation nach zweiten Aufruf von OpenDialog
Ich habe da ein mir unerklärliches Phänomen.
Ich habe einen Button auf einer Form. Der Button öffnet einen OpenDialog, mit dem ich eine Datei auswählen, die ich dann an ein externes Programm übergebe. Das funktioniert beim ersten Mal. Wenn ich dann aber ein zweites mal auf den Button klicke, bekomme ich eine Access Violation. Das Gleiche auch, wenn ich keine Datei im OpenDialog auswähle, sondern auf Abbrechen drücke. Hier mein Quelltext.
Delphi-Quellcode:
Liegt's an mir?
procedure TForm1.Button1Click(Sender: TObject);
var filename:string; var ChFilename:string; begin openDialog1.Filter := 'Xilog Plus Datei|*.pgm|Xilog Plus ASCII Datei|*.xxl'; if OpenDialog1.Execute then begin filename:= OpenDialog1.FileName end; filename:=OpenDialog1.FileName; Chfilename:='"'+filename +'" -s -i'; showmessage(filename); OpenDialog1.Free; ShellExecute(Application.Handle, nil, PChar('.\Winxiso.exe'), PChar(Chfilename), nil, SW_SHOW); SetLength(filename, Length(filename) -3); If FileExists(filename+'bmp') then begin Image1.Picture.LoadFromFile(filename+'bmp'); end; |
AW: Access Violation nach zweiten Aufruf von OpenDialog
OpenDialoge gibt man nicht frei mit free.
|
AW: Access Violation nach zweiten Aufruf von OpenDialog
Zitat:
|
AW: Access Violation nach zweiten Aufruf von OpenDialog
Zitat:
Delphi-Quellcode:
. Aber ich denke hier ist das Freigeben nicht wirklich beabsichtigt (war wohl mehr ein Reflex) :stupid:
FreeAndNil
|
AW: Access Violation nach zweiten Aufruf von OpenDialog
Mein
Delphi-Quellcode:
habe ich auch erst nach den Abstürzen reingesetzt, weil ich gehofft habe, dass es daran liegt.
OpenDialog1.free;
Leider nicht. |
AW: Access Violation nach zweiten Aufruf von OpenDialog
Wie sieht es so aus?
Delphi-Quellcode:
Sollte es immer noch knallen, müsstest Du einmal durchsteppen und uns die entsprechende Zeile nennen.
procedure TForm1.Button1Click(Sender: TObject);
const MAX_SHELLEXECUTE_ERROR = 32; var filename, ChFilename:string; begin OpenDialog1.Filter := 'Xilog Plus Datei|*.pgm|Xilog Plus ASCII Datei|*.xxl'; if OpenDialog1.Execute then begin filename:= OpenDialog1.FileName; Chfilename:='"'+filename +'" -s -i'; if ShellExecute(Application.Handle, nil, PChar('.\Winxiso.exe'), PChar(Chfilename), nil, SW_SHOW) > MAX_SHELLEXECUTE_ERROR then begin filename := ChangeFileExt(filename, '.bmp'); if FileExists(filename) then Image1.Picture.LoadFromFile(filename); end; end; end; |
AW: Access Violation nach zweiten Aufruf von OpenDialog
So funktioniert es, danke für die Hilfe!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz