Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi OpenDialog: Nur einen Ordner auswählen, kein File (https://www.delphipraxis.net/7313-opendialog-nur-einen-ordner-auswaehlen-kein-file.html)

thebaer 8. Aug 2003 22:33


OpenDialog: Nur einen Ordner auswählen, kein File
 
Hallo Leute,

eigentlich ne schwachsinnsfrage, aber ich steh grad auf
dem Schlauch. Wie zum teufel kann ich den
OpenDialog, oder irgendwas ähnliches so hinbiegen, dass
der User nur Ordner auswählen kann und ich diesen dann mit dem Pfad
in ein Edit-Feld schreibe.

Dabei soll aber auch keine Dummy Datei herhalten müssen.

Danke im voraus

TheBaer

Christian Seehase 8. Aug 2003 23:06

Re: OpenDialog: Nur einen Ordner auswählen, kein File
 
Moin The Baer,

Zitat:

Zitat von thebaer
Dabei soll aber auch keine Dummy Datei herhalten müssen.


Dann geht's mit TOpenDialog gar nicht.

Entweder Du begnügst Dich mit den Möglichkeiten von SelectDirectory (aus der Unit FileCtrl, Beispiele solltest Du auch hier im Forum finden), oder Du baust den Hier im Forum suchenSHBrowseForFolder Dialog ein.

Als letzte Variante fällt mir noch ein:
Die Komponenten TurboPower ShellShock. Diese enthalten eine Kompo, die SHBrowseForFolder kapselt. Zu finden bei sourceforge.net.

thebaer 9. Aug 2003 14:55

Re: OpenDialog: Nur einen Ordner auswählen, kein File
 
Habs anders gelöst, hab ne zweite Form mit ner ShellTreeView.

Danke trotzdem, werd mir die Sachen mal anschauen...

Teclis 23. Sep 2003 20:11

Re: OpenDialog: Nur einen Ordner auswählen, kein File
 
Den gibt es auch noch !habe ich auch gerade erst gefunden.

if opendialog1.execute then
label1.caption:=ExtractFileDir(opendialog1.filenam e);

CU Teclis

PS: Wahrscheinlich liest das gar keiner mehr ! :O´ :bouncing4:

Luckie 23. Sep 2003 20:55

Re: OpenDialog: Nur einen Ordner auswählen, kein File
 
Doch ich, um dir zu sagen, dass man es genau so nicht macht. :roll:

Mario 23. Sep 2003 21:04

Re: OpenDialog: Nur einen Ordner auswählen, kein File
 
Spricht etwas gegen SelectDirectory ?
Zitat:

SelectDirectory zeigt ein Dialogfeld an, in dem der Benutzer einen Verzeichnisnamen eingeben kann.

Unit
FileCtrl

Mathieu 6. Sep 2007 18:45

Re: OpenDialog: Nur einen Ordner auswählen, kein File
 
Wer zufällig auf diesen Beitrag stößt,
sollte einfach die JVCL installieren
und die Komponente TJvSelectDirectory nutzen!

Matti

stoxx 6. Sep 2007 18:48

Re: OpenDialog: Nur einen Ordner auswählen, kein File
 
irgendwo mal im Netz gefunden:


Delphi-Quellcode:
{
  This code shows the SelectDirectory dialog with additional expansions:
  - an edit box, where the user can type the path name,
  - also files can appear in the list,
  - a button to create new directories.


  Dieser Code zeigt den SelectDirectory-Dialog mit zusätzlichen Erweiterungen:
  - eine Edit-Box, wo der Benutzer den Verzeichnisnamen eingeben kann,
  - auch Dateien können in der Liste angezeigt werden,
  - eine Schaltfläche zum Erstellen neuer Verzeichnisse.
}

function SelectDirDialog(const Caption: string; const Root: WideString;
  var Directory: string; EditBox: Boolean = False; ShowFiles: Boolean = False;
  AllowCreateDirs: Boolean = True): Boolean;
  // callback function that is called when the dialog has been initialized
  //or a new directory has been selected

  // Callback-Funktion, die aufgerufen wird, wenn der Dialog initialisiert oder
  //ein neues Verzeichnis selektiert wurde
  function SelectDirCB(Wnd: HWND; uMsg: UINT; lParam, lpData: lParam): Integer;
    stdcall;
  var
    PathName: array[0..MAX_PATH] of Char;
  begin
    case uMsg of
      BFFM_INITIALIZED: SendMessage(Wnd, BFFM_SETSELECTION, Ord(True), Integer(lpData));
      // include the following comment into your code if you want to react on the
      //event that is called when a new directory has been selected
      // binde den folgenden Kommentar in deinen Code ein, wenn du auf das Ereignis
      //reagieren willst, das aufgerufen wird, wenn ein neues Verzeichnis selektiert wurde
      {BFFM_SELCHANGED:
      begin
        SHGetPathFromIDList(PItemIDList(lParam), @PathName);
        // the directory "PathName" has been selected
        // das Verzeichnis "PathName" wurde selektiert
      end;}
    end;
    Result := 0;
  end;
var
  WindowList: Pointer;
  BrowseInfo: TBrowseInfo;
  Buffer: PChar;
  RootItemIDList, ItemIDList: PItemIDList;
  ShellMalloc: IMalloc;
  IDesktopFolder: IShellFolder;
  Eaten, Flags: LongWord;
const
  // necessary for some of the additional expansions
  // notwendig für einige der zusätzlichen Erweiterungen
  BIF_USENEWUI = $0040;
  BIF_NOCREATEDIRS = $0200;
begin
  Result := False;
  if not DirectoryExists(Directory) then
    Directory := '';
  FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
  if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
  begin
    Buffer := ShellMalloc.Alloc(MAX_PATH);
    try
      RootItemIDList := nil;
      if Root <> '' then
      begin
        SHGetDesktopFolder(IDesktopFolder);
        IDesktopFolder.ParseDisplayName(Application.Handle, nil,
          POleStr(Root), Eaten, RootItemIDList, Flags);
      end;
      OleInitialize(nil);
      with BrowseInfo do
      begin
        hwndOwner := Application.Handle;
        pidlRoot := RootItemIDList;
        pszDisplayName := Buffer;
        lpszTitle := PChar(Caption);
        // defines how the dialog will appear:
        // legt fest, wie der Dialog erscheint:
        ulFlags := BIF_RETURNONLYFSDIRS or BIF_USENEWUI or
          BIF_EDITBOX * Ord(EditBox) or BIF_BROWSEINCLUDEFILES * Ord(ShowFiles) or
          BIF_NOCREATEDIRS * Ord(not AllowCreateDirs);
        lpfn   := @SelectDirCB;
        if Directory <> '' then
          lParam := Integer(PChar(Directory));
      end;
      WindowList := DisableTaskWindows(0);
      try
        ItemIDList := ShBrowseForFolder(BrowseInfo);
      finally
        EnableTaskWindows(WindowList);
      end;
      Result := ItemIDList <> nil;
      if Result then
      begin
        ShGetPathFromIDList(ItemIDList, Buffer);
        ShellMalloc.Free(ItemIDList);
        Directory := Buffer;
      end;
    finally
      ShellMalloc.Free(Buffer);
    end;
  end;
end;

Matze 6. Sep 2007 18:51

Re: OpenDialog: Nur einen Ordner auswählen, kein File
 
Wenn ihr das schon rauskramt, dann auch noch 2 weitere Alternativen ;)

Code-Library-Eintrag
Delphi-Komponente

Bomberbb 1. Apr 2009 13:05

Re: OpenDialog: Nur einen Ordner auswählen, kein File
 
Nun klinke ich mich hier mal ein. Ich nutze die Funktion aus Post #8, allerdings kann ich einen neuen Ordner nur direkt benennen, wenn bereits ein anderer Ordner in dem Verzeichnis existiert. Sieht man sehr schön, wenn man mehrfach auf neuer Ordner klickt.
Gibt es da noch eine Möglichkeit das zu ändern, hab schon so einiges probiert.

Edit:
Hab es noch etwas genauer rausgefunden: den neuen Ordner kann man nur dann direkt umbenennen, wenn der markierte Ordner aufgeklappt ist. Das geht natürlich nicht, wenn der noch keine Unterordner hat


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

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