Seite 1 von 1

Filerequester kombiniert mit openpathrequester?

Verfasst: 24.03.2005 02:11
von zigapeda
Hallo leutz,

Hab mal ne frage gibt es einen requester mit dem man pfade oder dateien wählen kann? Wenn man eine verknüpfung unter windows ertellt kommt auch so ein fenster in dem man beides wählen kann.

Verfasst: 24.03.2005 02:23
von ts-soft
Mithilfe der API-Funktion BrowseForFolder kannste das bewerkstelligen. Ob es hierzu Beispiele im CodeArchiv gibt weiß ich nicht, solltest einfach mal suchen

Verfasst: 24.03.2005 03:19
von zigapeda
kannst du mir den syntax mal posten?

Verfasst: 24.03.2005 04:40
von ts-soft
zigapeda hat geschrieben:kannst du mir den syntax mal posten?
ja

Code: Alles auswählen

Procedure.s PathRequester_with_Files(Titel.s)
  Folder.s = Space(#MAX_PATH)
  Dir.BROWSEINFO
  Dir\hwndOwner = GetActiveWindow_()
  Dir\pidlRoot = 17
  Dir\pszDisplayName = @Folder
  Dir\lpszTitle = @Titel
  Dir\ulFlags = #BIF_BROWSEINCLUDEFILES
  Dir\lpfn = 0
  Dir\lParam = 0
  Dir\iImage = 0
  result.l = SHBrowseForFolder_(@Dir)
  SHGetPathFromIDList_(result, @Folder)
  If Folder <> ""
    If FileSize(Folder) = - 2
      If Right(Folder, 1) <> "" : Folder + "" : EndIf
    EndIf
  EndIf
  CoTaskMemFree_(result)
  ProcedureReturn Folder
EndProcedure
Debug PathRequester_with_Files("Nimm Dir nen Ordner oder nimm Dir nen File")
Gruß
Thomas
[Edit]Nachtrag: wenn du: Dir\pidlRoot = 17 in Dir\pidlRoot = 0 änderst, kommst dem Windowsdialog noch etwas näher[/Edit]

Verfasst: 24.03.2005 05:40
von ts-soft
Fall Dir die Version nicht ausreicht, hier noch eine etwas flexiblere Variante:

Code: Alles auswählen

Procedure BrowseCallbackProc(hwnd, msg, lParam, lData)
  szDir$ = Space(#MAX_PATH)
  Select msg
    Case #BFFM_INITIALIZED
      SendMessage_(hwnd, #BFFM_SETSELECTION, #BFFM_INITIALIZED, lData)
    Case #BFFM_SELCHANGED
      If SHGetPathFromIDList_(lParam, @szDir$)
        SendMessage_(hwnd, #BFFM_SETSTATUSTEXT, 0, @szDir$)
      EndIf
  EndSelect
EndProcedure

Procedure.s BrowseForFolder(Style, Titel.s, Path.s)
  Folder.s = Space(#MAX_PATH)
  Dir.BROWSEINFO
  Dir\hwndOwner = GetActiveWindow_()
  Dir\pszDisplayName = @Folder
  Dir\lpszTitle = @Titel
  Dir\ulFlags = Style
  Dir\lpfn = @BrowseCallbackProc()
  Dir\lParam = @Path
  result.l = SHBrowseForFolder_(@Dir)
  SHGetPathFromIDList_(result, @Folder)
  If Folder <> ""
    If FileSize(Folder) = - 2
      If Right(Folder, 1) <> "\" : Folder + "\" : EndIf
    EndIf
  EndIf
  CoTaskMemFree_(result)
  ProcedureReturn Folder
EndProcedure

Style = #BIF_STATUSTEXT | #BIF_EDITBOX | #BIF_BROWSEINCLUDEFILES | #BIF_USENEWUI
Debug BrowseForFolder(Style, "Wählen Sie das Ziel der Verknüpfung:", "C:\Windows\")
Viel Spaß, alles ohne jegliche Funktionsgarantie
[Edit]Habe den fehlerhaften Code nochmal Korrigiert, hoffe es funktioniert jetzt[/Edit]

Verfasst: 24.03.2005 11:15
von zigapeda
juhu es hat funkioniert danke

mfg zigapeda <)