Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Vcl.Dialogs.TFileOpenDialog.Execute immer false (https://www.delphipraxis.net/212699-vcl-dialogs-tfileopendialog-execute-immer-false.html)

yymsc 17. Mär 2023 09:29

Vcl.Dialogs.TFileOpenDialog.Execute immer false
 
Hallo,

bin am verzweifeln: TFileOpenDialog.Execute liefert immer false zurück, auch wenn ich im Dialog eine Datei auswähle und dann auf 'Öffnen' klicke.

Beispiel:
Delphi-Quellcode:
var
  name : String;
  fileOpenDialog: TFileOpenDialog;
begin
  fileOpenDialog := TFileOpenDialog.Create(self);
  try
  if fileOpenDialog.Execute then
    name := fileOpenDialog.FileName;
  finally
    FreeAndNil(fileOpenDialog);
  end;
D.h. name wird nie gesetzt!

In der Doku zu TCustomFileDialog.Execute steht:
Zitat:

Execute öffnet eine Instanz des Dialogfeldes zur Laufzeit. Im Allgemeinen gibt Execute true zurück, wenn der Benutzer eine Auswahl trifft und auf OK klickt, und false, wenn der Benutzer das Dialogfeld schließt, ohne eine Auswahl zu treffen.
Was bedeutet hier 'Im Allgemeinen'?
Hat jemand eine Idee was das Problem sein könnte?
Ich habe Delphi 11 Update 3.

VG

ConnorMcLeod 17. Mär 2023 10:38

AW: Vcl.Dialogs.TFileOpenDialog.Execute immer false
 
Sieht gut aus und funktioniert auch im Test (D 10.4.2)
Mglw ist die Variable "name" unglücklich benamst. Das könnte auch irgendwo ein Schlüsselwort sein.

Harry Stahl 17. Mär 2023 10:52

AW: Vcl.Dialogs.TFileOpenDialog.Execute immer false
 
Wie schon erwähnt würde ich hier auch nie "Name" wählen, da z.B. Form.name und sämtliche Komponenten die Eigenschaft "Name" haben, da kann schnell mal was durcheinander gehen.

Ist hier aber nicht das Problem.

Der Code funktioniert hier. Ist die Datei, die Du auswählst auch lesbar und nicht z.B. in einen anderen Programm geöffnet, welches das Dateiflag auf Sharedenied gesetzt hat?

yymsc 17. Mär 2023 11:38

AW: Vcl.Dialogs.TFileOpenDialog.Execute immer false
 
Vielen Dank schon mal für Eure Unterstützung :-D
Also an der Variable 'name' lag es definitv nicht, der Originalcode sah so aus und ich hatte das nur etwas umgeschrieben:

Code:
with TFileOpenDialog.Create(self) do
  try
    Options := [fdoPickFolders,fdoPathMustExist];
    if Execute = true
      then DirectoryEdit.Text := Filename;
  finally
    Free;
  end;
Ich möchte also eigentlich ein Verzeichnis wählen, aber egal welches Verzeichnis ich auswähle Execute liefert immer false.

Was mich halt irritiert ist diese Aussage in der Doku 'Im Allgemeinen gibt Execute true zurück, wenn der Benutzer eine Auswahl trifft...' Es scheint wohl bei mir - warum auch immer - nun so zu sein dass es eben nicht true zurückliefert und der Filename auch nicht gesetzt wird.

DeddyH 17. Mär 2023 11:48

AW: Vcl.Dialogs.TFileOpenDialog.Execute immer false
 
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var
  lDialog: TFileOpenDialog;
begin
  lDialog := TFileOpenDialog.Create(nil);
  try
    lDialog.Options := [fdoPickFolders,fdoPathMustExist];
    if lDialog.Execute then
      // lblTest ist einfach nur ein Label auf dem Formular
      lblTest.Caption := lDialog.FileName;
  finally
    lDialog.Free;
  end;
end;
Ohne with und Vergleich auf true funktioniert das so bei mir.

Bernhard Geyer 17. Mär 2023 11:59

AW: Vcl.Dialogs.TFileOpenDialog.Execute immer false
 
fdoPickFolders und Auswahl einer Datei?????

ConnorMcLeod 17. Mär 2023 12:13

AW: Vcl.Dialogs.TFileOpenDialog.Execute immer false
 
Zitat:

Zitat von yymsc (Beitrag 1519990)
Code:
with TFileOpenDialog.Create(self) do
  try
    Options := [fdoPickFolders,fdoPathMustExist];
    if Execute = true
      then DirectoryEdit.Text := Filename;
  finally
    Free;
  end;

Mach mal bei "Execute" und "Filename" ein [F7] und schau nach, was da wirklich exekutiert wird. Ohne "with" wäre es übersichtlicher, deswegen ist "with" in 99% der Fälle ein NoGo.
So, wie DeddyH es schreibt...

himitsu 17. Mär 2023 12:22

AW: Vcl.Dialogs.TFileOpenDialog.Execute immer false
 
Gründe für die Nichtanzeige dieses Dialogs:

* ungültiger InitialFolder
* ungültiger vordefinierter FileName
* alte CommonAPI benutzt, welche diesen Dialog noch nicht kennt, da kein Manifest im Projekt oder Laufzeit-Themes im Manifest deaktiviert
* Styles im Windows deaktivert (bis Win10 ging das noch und Einige fanden z.B. in RDP-Servern den alten Win2k-Style zu geil)
* altes Windows, was diese API noch garnicht kennt

Wenn er nicht angezeigt werden kann, dann ist es so, als wenn jemand auf Abbrechen bzw. [x] gedrückt hätte.

yymsc 17. Mär 2023 16:22

AW: Vcl.Dialogs.TFileOpenDialog.Execute immer false
 
Die Dialog wird angezeigt, nur wenn ich ein Verzeichnis auswähle und dann auf 'Ordner auswählen' klicke bekomme ich eben false zurück und Dialog.Filename ist leer.
Auch mit dieser Variante ohne 'with':
Code:
  Dialog := TFileOpenDialog.Create(self);
  try
    Dialog.DefaultFolder := 'c:\temp';
    Dialog.Options := [fdoPickFolders,fdoPathMustExist];
    if Dialog.Execute = true
      then DirectoryEdit.Text := Dialog.Filename;
  finally
    FreeAndNil(Dialog);
  end;

haentschman 17. Mär 2023 16:36

AW: Vcl.Dialogs.TFileOpenDialog.Execute immer false
 
Zitat:

auch wenn ich im Dialog eine Datei auswähle
Delphi-Quellcode:
Dialog := TFileOpenDialog.Create(self);
  try
    Dialog.DefaultFolder := 'c:\temp';
    //Dialog.Options := [fdoPickFolders,fdoPathMustExist]; // du willst eine Datei auswählen, aber nicht nur den Ordner?
    if Dialog.Execute then
      DirectoryEdit.Text := Dialog.Filename;
  finally
    FreeAndNil(Dialog);
  end;
...was ist hiermit?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz