Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "Dieser PC" als InitialDir für OpenDialog (https://www.delphipraxis.net/205255-dieser-pc-als-initialdir-fuer-opendialog.html)

Gelmo 18. Aug 2020 17:53

Delphi-Version: 10.3 Rio

"Dieser PC" als InitialDir für OpenDialog
 
Hallo zusammen,
wenn ich unter Windows 10 im Explorer auf „Dieser PC“ klicke, werden neben den Bibliotheken des Benutzers die verfügbaren Laufwerke angezeigt.
Dieses Fenster hätte ich in einem Opendialog gern als Initialdir angegeben. Leider konnte ich selbst nicht den Pfad herausfinden um zu diesem Platz zu kommen. Wenn ich „Dieser PC“ mit der rechten Maustaste anklicke erscheint eine Liste mit mehreren Optionen und mit „Eigenschaften“ an unterster Stelle. Ein Klick darauf zeigt dann aber keine Eigenschaften zu „Dieser PC“ an, sondern es öffnet sich das Fenster mit den Angaben zu dem PC (Name, Betriebssystem, CPU usw.) und mit der Überschrift „Systemsteuerung > System und Sicherheit > System“. Wenn ich aber zum Beispiel „C:\System“ als InitialDir verwende, öffnet sich bei Opendialog-Execute der irgendwann zuletzt benutzte Ordner.
Auch über die Suche im Internet konnte ich keine Lösung finden. Ich wäre froh, wenn mir hier jemand erklären könnte und möchte, ob und wie ich hier weiterkommen kann
Vielen Dank
MfG Gelmo

himitsu 18. Aug 2020 18:18

AW: "Dieser PC" als InitialDir für OpenDialog
 
Man kann beim OpenDialog das InitialDir mitgeben.

Allerdings ist in neueren Windowsen (seit mindestens Win7) eine Optimierung drin. *1
Windows merkt sich die letzte Auswahl und stellt sie beim nächsten Öffnen wieder her, wobei die Übergabe des InitialVerzeichnisses ignoriert wird.
(hätte Microsoft es richtig gemacht, dann hätten sie dafür eine Option zum Abschaltein eingebaut, oder es zumindestens nur dann gemacht, wenn man kein InitialDir angibt)
-> siehe Stevie/jfheins ... die haben den Link/Begriff schon gefunden

Das BasisVerzeichnis kann man auch definieren, also das Grundverzeichnis innerhalb dessen man navigieren kann.

Man kann sich in den DialogHook hängen und dort "nach" dem Laden das "Initial"-Verzeichnis nochmal wechseln.



*1) Das wird je Programm gepeichert.
Deswegen würde ich auch empfehlen den TFileOpenDialog (Vista-Gruppe) empfehlen.
In aktuellen Delphi nutzt aber TOpenDialog intern den TFileOpenDialog, wenn das Programm in einem passenden Windows läuft, ab Vista und davor die alte API.
Den Support für Vor-Vista/7 hab ich persönlich eingestellt, also spricht nichts gegen neuere APIs.

Und beim TFileOpenDialog kann man auch eine "ID" mitgeben. (beim TOpenDialog wird das leider nicht durchgereicht)
So hat man im Programm mehrere unterschiedliche Open-Dialoge zu unterschiedlichen Verzeichnissen zur Verfügung, bzw, kann mit der selben ID n unterschiedlichen Stellen die selbe "Optimierung" vom Windows benutzen.


Im Explorer kann man in den Einstellungen angeben welches InitialDir beim Starten benutzt werden soll.
Ansicht > Optionen > Schnellzugriff oder Dieser PC (leider nur diese Beiden als Auswahl)
Ich vermute/hofffe dass der Dialog die selbe Einstellung benutzt, wenn das Programm kein InitialDir vorgibt.

Stevie 18. Aug 2020 18:25

AW: "Dieser PC" als InitialDir für OpenDialog
 
https://xtream.be/blog/win10shellfolders/

jfheins 18. Aug 2020 18:25

AW: "Dieser PC" als InitialDir für OpenDialog
 
Um die Lösung explizit zu posten statt nur einem Link:

Versuche mal, als Startverzeichnis das hier anzugeben:
Delphi-Quellcode:
InitialDir := '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}'
Es gibt einige Spezalordner, die sich nur über so eine CLSID ansprechen lassen.

Gelmo 18. Aug 2020 20:09

AW: "Dieser PC" als InitialDir für OpenDialog
 
Vielen Dank an alle,
die Zeile von jfheins klappt. Mehr schreibe ich heute nicht mehr, da während eines ausführlicheren Antwortversuch zuvor der Zugang zur Delphi-Praxis abgebrochen ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz