Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi SelectDirectory (https://www.delphipraxis.net/196006-selectdirectory.html)

KodeZwerg 13. Apr 2018 22:49

AW: SelectDirectory
 
SelDir() Update

Delphi-Quellcode:
function SelDir ( StartPath : String; var SelectedDir : String ) : Boolean;
var
 tmp : TArray<string>;
begin
  Result := False;
  if Win32MajorVersion >= 6 then
  with TFileOpenDialog.Create(nil) do
    try
      Title := 'Select Directory';
      Options := [fdoPickFolders, fdoPathMustExist, fdoForceFileSystem];
      OkButtonLabel := 'Select';
      DefaultFolder := StartPath;
      FileName := StartPath;
      if Execute then
      begin
        SelectedDir := FileName;
        Result := True;
      end;
    finally
      Free;
    end
    else
//  Mögliche Options: sdHidePinnedPlaces, sdNoDereferenceLinks, sdForceShowHidden, sdAllowMultiselect
     if SelectDirectory(StartPath, tmp, [sdForceShowHidden], 'Select Directory', 'Foldername:', 'Select')
// BACKUP - hier noch der Aufruf für den kleinen Dialog
//  Mögliche Options: sdNewFolder, sdShowEdit, sdShowShares, sdNewUI, sdShowFiles, sdValidateDir
//  mit Option sdShowFiles wird aus dem auch ein Datei-Selektor
//    if SelectDirectory('Select Directory', ExtractFileDrive(StartPath), StartPath,
//                       [sdNewFolder, sdShowEdit, sdShowShares, sdNewUI, sdValidateDir])
     then begin
       SelectedDir := tmp[0]; // Achtung, hier wird nur der erste Eintrag genommen! Also so nicht "sdAllowMultiselect" fähig
//       SelectedDir := StartPath; //  BACKUP - für den alten Dialog
       Result := True;
     end;
end;


// Beispiel Aufruf:
procedure TForm2.Button1Click(Sender: TObject);
var
  s : String;
begin
 if SelDir('C:\Tools\',S) then ShowMessage(s);
end;
Dank gilt himitsu für's Zeit nehmen und Erklären und das bei mir endlich der Groschen gefallen ist warum ich's Anfang nicht hinbekam, es gibt zwei Unterschiedliche Option-Sets, muss man auch erstmal draufkommen :)

Nun sehen Dialoge unter XP und Vista sogut wie gleich aus, beide Verhalten sich relativ identisch.

Walter Landwehr 14. Apr 2018 10:17

AW: SelectDirectory
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das sieht zwar sehr schön aus, aber mir fehlen immer noch die verbundenen Laufwerke. (siehe Anhang) Für den Anwender ist es einfacher, wenn diese sichtbar sind, als über das Netzwerk diese zu suchen was die meisten nicht mal verstehen.
Gibt's da noch einen Trick?

Ansonsten wirklich super, vielen Dank schon mal.

KodeZwerg 14. Apr 2018 10:43

AW: SelectDirectory
 
Zitat:

Zitat von Walter Landwehr (Beitrag 1399213)
mir fehlen immer noch die verbundenen Laufwerke

Das verstehe ich gerade nicht, im Bild sind doch Netzlaufwerke abgebildet?

Walter Landwehr 14. Apr 2018 11:07

AW: SelectDirectory
 
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry das Bild kommt von dem Windows Explorer. Hier das Bild von TFileOpenDialog.

Walter Landwehr 14. Apr 2018 11:39

AW: SelectDirectory
 
Es geht wenn man mit net use die Laufwerke zuweist.

KodeZwerg 14. Apr 2018 11:41

AW: SelectDirectory
 
Delphi-Quellcode:
function SelDir ( StartPath : String; var SelectedDir : String ) : Boolean;
begin
  Result := False;
  with TFileOpenDialog.Create(nil) do
    try
      Title := 'Select Directory';
      Options := [fdoPickFolders, fdoPathMustExist, fdoAllNonStorageItems, fdoShareAware, fdoForceShowHidden, fdoDefaultNoMiniMode];
      OkButtonLabel := 'Select';
      DefaultFolder := StartPath;
      FileName := StartPath;
      if Execute then
      begin
        SelectedDir := FileName;
        Result := True;
      end;
    finally
      Free;
    end
end;
Nur ein Versuch, hier habe ich andere Optionen gewählt die Eigentlich auch Netzlaufwerke Anzeigen sollte.
Bitte einmal Testen, Danke.
Ps: Hier ist der XP Dialog komplett weg.

Nachteil: Es werden dummerweise auch Archive angezeigt :(

edit
hab diese Überbleibsel entfernt
Code:
var tmp : TArray<string>;

Walter Landwehr 14. Apr 2018 11:52

AW: SelectDirectory
 
Ja das funktioniert auch. Danke für Deine Hilfe.

KodeZwerg 14. Apr 2018 11:59

AW: SelectDirectory
 
Das freut mich wenn alles nun klappt!
Da leider auch, zumindest bei mir, auch Archive angezeigt werden wäre da eventuell noch ein "ExtractFilePath()" sinnvoll.
Nicht das Dein Programm Versucht eine Datei als Ordner zu benutzen.

KodeZwerg 14. Apr 2018 12:09

AW: SelectDirectory
 
Delphi-Quellcode:
function SelDir ( StartPath : String; var SelectedDir : String ) : Boolean;
begin
  Result := False;
  with TFileOpenDialog.Create(nil) do
    try
      Title := 'Select Directory';
      Options := [fdoPickFolders, fdoPathMustExist, fdoAllNonStorageItems, fdoShareAware, fdoForceShowHidden, fdoDefaultNoMiniMode];
      OkButtonLabel := 'Select';
      DefaultFolder := StartPath;
      FileName := StartPath;
      if Execute then
      begin
        if FileExists(FileName) then SelectedDir := ExtractFilePath(FileName) else SelectedDir := FileName;
        Result := True;
      end;
    finally
      Free;
    end
end;
So wärst Du auf der sicheren Seite, falls User eine .CAB Datei wählt, wird dessen Verzeichniss genommen anstelle des Archivnamens.

Walter Landwehr 14. Apr 2018 13:21

AW: SelectDirectory
 
Danke habe ich umgesetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 Uhr.
Seite 2 von 3     12 3      

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