#include 'Bap.ch' #include "Common.ch" #include "Dll.ch" #include 'WinDefs.ch' //? ..\source\samples\apps\imgview has a DirSelector-Class ////////////////////////////////////////////////////////////////////// // / // DirSelect.prg / // / // Copyright: / // Maniacc Software Inc., (c) 2000. All rights reserved. / // / // Contents: / // MxBrowseForFolder / // / // Created 11/29/2000 / // / ////////////////////////////////////////////////////////////////////// ****************************************************** * FUNCTION MxBrowseForFolder * ****************************************************** #define NULL 0 FUNCTION MxBrowseForFolder( oWin, cPrompt, cFolderRoot, lEditBox, lValidate, lFiles ) LOCAL hWnd := IIF(oWIn=NIL,SetAppWindow():getHWND(),oWin:getHWND()) LOCAL nPIDL LOCAL aOFN LOCAL cOFN LOCAL nFlags := 0 LOCAL ret := '' LOCAL nIDL := 0 LOCAL cFolderName := replicate(chr(0),1000) DEFAULT lEditBox TO .T. DEFAULT lValidate TO .T. DEFAULT lFiles TO .F. if cFolderRoot <> NIL nPidl := ILCreateFromPathA(cFolderRoot) endif IF lEditBox nFlags := nFlags+BIF_EDITBOX nFlags += BIF_NEWDIALOGSTYLE ENDIF IF lValidate nFlags := nFlags+BIF_VALIDATE ENDIF aOFN = BaInit(8) BaStruct(aOFN,hWnd) // hwndOwner BaStruct(aOFN,nPIDL) // pidlRoot BaStruct(aOFN,@cFolderName) // lpstrFolder BaStruct(aOFN,@cPrompt) // lpstrPrompt BaStruct(aOFN,nFlags) // nFlags BaStruct(aOFN,0) // CallBackProc BaStruct(aOFN,0) // lParam BaStruct(aOFN,0) // iImage cOFN = BaAccess(aOFN) sleep(5) nIDL = SHBrowseForFolder(cOFN) IF nIDL > 0 SHGetPathFromIDList(nIDL,@cFolderName) CoTaskMemFree(nIDL) ret := substr(cFolderName,1,at(chr(0),cFolderName)-1) // it is needed to check for the presence of the driver in "ret" ENDIF RETURN ret DLLFUNCTION SHBrowseForFolder( cStru ) USING STDCALL FROM SHELL32.DLL DLLFUNCTION SHGetPathFromIDList(pidl,@cFolderName) USING STDCALL FROM SHELL32.DLL DLLFUNCTION ILCreateFromPathA(@cPath) USING STDCALL FROM SHELL32.DLL DLLFUNCTION CoTaskMemFree(p) USING STDCALL FROM OLE32.DLL *****************************************************************