Delphi-PRAXiS

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/)
-   -   Verzeichnisnamen ermitteln mit OpenDialog (https://www.delphipraxis.net/60410-verzeichnisnamen-ermitteln-mit-opendialog.html)

Coder 6. Jan 2006 13:28


Verzeichnisnamen ermitteln mit OpenDialog
 
Wie kann ich den Verzeichnisnamen ermitteln, ohne daß ich in Opendialog eine Datei anklicken muß?

Manchmal möchte ich den Dateinamen eines leeren Verzeichnisses ermitteln.
Damit die User darin speichern können.
Beenden kann ich open dialog allerdings nur erfolgreich, wenn ich ein File anklicke.

Was kann ich machen?

Luckie 6. Jan 2006 13:31

Re: Verzeichnisnamen ermitteln mit OpenDialog
 
In dem du den entsprechenden Dialog dafür benutzt: Hier im Forum suchenBrowseForFolder.

marabu 6. Jan 2006 13:41

Re: Verzeichnisnamen ermitteln mit OpenDialog
 
Hallo.

Manchmal hilft schon SelectDirectory() aus der Unit FileCtrl.

Freundliche Grüße vom marabu

Matze 6. Jan 2006 13:48

Re: Verzeichnisnamen ermitteln mit OpenDialog
 
In der Code-Library steht darüber auch etwas.

Coder 6. Jan 2006 14:15

Re: Verzeichnisnamen ermitteln mit OpenDialog
 
ab welcher Version gibt es den
Browseforfolder?

die 3 er hat ihn wohl noch nicht

Hador 6. Jan 2006 14:23

Re: Verzeichnisnamen ermitteln mit OpenDialog
 
Probiers mal mit folgender Funktion:

Delphi-Quellcode:
function GetFolder: string;
var
  bi: TBROWSEINFO;
  lpBuffer: PChar;
  pidlPrograms,
  pidlBrowse: PItemIDList;
  ShellH: IMalloc;
begin
  if (not SUCCEEDED(SHGetSpecialFolderLocation(0, 0,
                                               pidlPrograms))) then
    Exit;
  try
    GetMem(lpBuffer, MAX_PATH);
    try
      bi.hwndOwner:=GetActiveWindow;
      bi.pidlRoot:=pidlPrograms;
      bi.pszDisplayName:=lpBuffer;
      bi.lpszTitle:='Zielverzeichnis wählen';
      bi.ulFlags:=BIF_RETURNONLYFSDIRS;
      bi.lpfn:=NIL;
      bi.lParam:=0;
      pidlBrowse:=SHBrowseForFolder(bi);

      if (pidlBrowse <> nil) and (SHGetPathFromIDList(pidlBrowse,
                                                      lpBuffer)) then
        Result:=lpBuffer;
    finally
      FreeMem(lpBuffer);
    end;
  finally
    if SHGetMalloc(ShellH) = NOERROR then
       ShellH.Free(pidlBrowse);
  end;
end;

Coder 6. Jan 2006 14:28

Re: Verzeichnisnamen ermitteln mit OpenDialog
 
mhh, danke
es ging viel leichter mit : SelectDirectory

Delphi-Quellcode:
var Dir:String
begin
Dir := ExtractFileDir(Application.ExeName);
if SelectDirectory (Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],SELDIRHELP) then
    form3.Edit1.Text := Dir;
end;
^^ ist ja richtig komfortabel der Dialog...
Spitze!


aber: ab welcher Version gibt es den Browseforfolder?

die 3 er hat ihn wohl noch nicht

Luckie 6. Jan 2006 15:43

Re: Verzeichnisnamen ermitteln mit OpenDialog
 
Zitat:

Zitat von Coder
aber: ab welcher Version gibt es den Browseforfolder?

Das hat nichts mit der Delphi Version zu tun, das ist eine Windows API Funktion.

Warum steht das eigentlich unter "Programmieren allgemein"? :roll:

SirThornberry 6. Jan 2006 15:45

Re: Verzeichnisnamen ermitteln mit OpenDialog
 
dann wird er wissen wollen in welcher unit die funktion declariert ist damit er sie verwenden kann bzw. ab welcher delphiversion die declaration in irgend einer unit vorhanden ist. Natürlich kann er die funktion auch manuell importieren aber es ist doch bedeutend einfach einfach eine unit einzubinden.

faux 6. Jan 2006 15:46

Re: Verzeichnisnamen ermitteln mit OpenDialog
 
Zitat:

Zitat von Coder
ab welcher Version gibt es den Browseforfolder?

Das müsste eine API-Funktion sein. MSDN-Library durchsuchenBrowseForFolder Hast du ShellAPI in die Uses-Klausel übernommen?

EDIT: Sorry, hab Luckies Post nicht gesehen.

Grüße
Faux


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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