Page 1 of 2
Getfolder()
Posted: Mon Dec 30, 2013 5:30 pm
by sunningdale
When using Getfolder() on my system it always reverts to displaying Mycomputer and from there one has to click from folder to folder to get down to a buried sub folder.
Is there any way of using Curdir() or something else so that instead of starting from the top every time the machine remembers your last starting point and enables you to change from there.
Getfolder()
Posted: Mon Dec 30, 2013 6:08 pm
by Pablo César
Look at this:
http://hmgforum.com/viewtopic.php?p=22824#p22824 probably is what you are looking for...
Re: Getfolder()
Posted: Mon Dec 30, 2013 6:33 pm
by sunningdale
THANK YOU VERY MUCH - YOU HAVE MADE SOMEONE VERY HAPPY.
Getfolder()
Posted: Mon Dec 30, 2013 7:07 pm
by Pablo César
sunningdale wrote:THANK YOU VERY MUCH - YOU HAVE MADE SOMEONE VERY HAPPY.
Nice and probably some more...
Re: Getfolder()
Posted: Wed Apr 04, 2018 3:56 pm
by dominique_devuyst
Hello,
I have the same problem with getfolder().
Does anyone have a solution to this getfolder () that does not take into account the initpath?
I tried to compile the "getfolder sample" posted a long time ago by gfilatov (via Pablo César), but I have a 'multiple definition' linker error :
Code: Select all
Harbour 3.2.0dev (r1601151502)
Copyright (c) 1999-2015, http://harbour-project.org/
C:/hmg.3.4.3/lib/libhmg.a(c_dialogs.o):c_dialogs.c:(.text+0x0): multiple definition of `BrowseCallbackProc@16'
C:/Users/GEBRUI~1/AppData/Local/Temp/hbmk_vtu0e5.dir/example_browseforfolder.o:example_browseforfolder.c:(.text+0x230): first defined here
collect2.exe: error: ld returned 1 exit status
hbmk2[browsefolder]: Error: Running linker. 1
gcc.exe C:/Users/GEBRUI~1/AppData/Local/Temp/hbmk_vtu0e5.dir/example_browseforfolder.o C:/Users/GEBRUI~1/AppData/Local/Temp/hbmk_vtu0e5.dir/hbmk_vrhpuh.o C:/hmg.3.4.3/SAMPLES/Functions/GETFILE/_temp.o -mwindows -Wl,--start-group -lhmg -lcrypt -ledit -leditex -lgraph -lini -lreport -lhfcl -lmsvfw32 -lvfw32 -lhbct -lhbwin -lhbmzip -lminizip -lhbmemio -lhbmisc -lhbmysql -lmysql -lhbtip -lsqlite3 -lhbsqlit3 -lsddodbc -lrddsql -lsddmy -lhbodbc -lodbc32 -lhbhpdf -lhbfimage -lhbpgsql -lhbnetio -lxhb -lpng -llibhpdf -lhbvpdf -lhbzebra -lhbextern -lhbdebug -lhbvmmt -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainwin -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib -Wl,--end-group -obrowsefolder.exe -LC:/hmg.3.4.3/harbour/lib/win/mingw -LC:/hmg.3.4.3/lib
Can someone help me with that?
Dominique
Re: Getfolder()
Posted: Wed Apr 04, 2018 4:00 pm
by serge_girard
Hi Dominique,
Please attach the prg !
Serge
Re: Getfolder()
Posted: Thu Apr 05, 2018 7:53 am
by dominique_devuyst
Hello Serge,
Here is the 'getfolder' sample prg I tried to compile :
Code: Select all
#include "minigui.ch"
Procedure Main()
DEFINE WINDOW Form_1 ;
AT 0,0 WIDTH 200 HEIGHT 150 ;
MAIN ;
TITLE "GetFolder Sample" ;
NOSIZE
DEFINE MAIN MENU
DEFINE POPUP 'Test'
MENUITEM 'BrowseForFolder()' ACTION MsgInfo(BrowseForFolder('Select Folder', GetCurrentFolder()),"Result")
MENUITEM 'Exit' ACTION Form_1.Release
END POPUP
END MENU
END WINDOW
Form_1.Center
Form_1.Activate
Return
*-----------------------------------------------------------------------------*
Static Function BrowseForFolder( cTitle, cInitPath )
*-----------------------------------------------------------------------------*
Return HMG_BrowseForFolder( NIL, cTitle, NIL, NIL, cInitPath )
*------------------------------------------------------------------------------*
* Low Level C Routines
*------------------------------------------------------------------------------*
#pragma BEGINDUMP
#include <windows.h>
#include "hbapi.h"
#include <commdlg.h>
#include <shlobj.h>
#include <commctrl.h>
int CALLBACK BrowseCallbackProc ( HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData )
{
TCHAR szPath[ MAX_PATH ];
switch( uMsg )
{
case BFFM_INITIALIZED: if( lpData )
SendMessage( hWnd, BFFM_SETSELECTION, TRUE, lpData );
break;
case BFFM_SELCHANGED: SHGetPathFromIDList( ( LPITEMIDLIST ) lParam, szPath ); SendMessage( hWnd, BFFM_SETSTATUSTEXT, 0, ( LPARAM ) szPath );
}
return 0;
}
HB_FUNC( HMG_BROWSEFORFOLDER ) // Syntax: HMG_BROWSEFORFOLDER([<hWnd>],[<cTitle>],[<nFlags>],[<nFolderType>],[<cInitPath>])
{
HWND hWnd = HB_ISNIL( 1 ) ? GetActiveWindow() : ( HWND ) hb_parnl( 1 );
BROWSEINFO BrowseInfo;
char *lpBuffer = ( char * ) hb_xgrab( MAX_PATH + 1 );
LPITEMIDLIST pidlBrowse;
SHGetSpecialFolderLocation( hWnd, HB_ISNIL(4) ? CSIDL_DRIVES : hb_parni(4), &pidlBrowse );
BrowseInfo.hwndOwner = hWnd;
BrowseInfo.pidlRoot = pidlBrowse;
BrowseInfo.pszDisplayName = lpBuffer;
BrowseInfo.lpszTitle = HB_ISNIL( 2 ) ? "Select a Folder" : hb_parc( 2 );
BrowseInfo.ulFlags = HB_ISCHAR( 5 ) ? BIF_STATUSTEXT : hb_parni( 3 );
BrowseInfo.lpfn = HB_ISCHAR( 5 ) ? BrowseCallbackProc : NULL;
BrowseInfo.lParam = HB_ISCHAR( 5 ) ? ( LPARAM ) ( char * ) hb_parc( 5 ) : 0;
BrowseInfo.iImage = 0;
pidlBrowse = SHBrowseForFolder( &BrowseInfo );
if( pidlBrowse )
{
SHGetPathFromIDList( pidlBrowse, lpBuffer );
hb_retc( lpBuffer );
}
else
hb_retc( "" );
hb_xfree( lpBuffer );
}
#pragma ENDDUMP
Dominique
Re: Getfolder()
Posted: Thu Apr 05, 2018 11:43 am
by serge_girard
Hi Dominique,
This sample is a minigui sample.
You can use :
cFOLDER := GetFolder()
MSGINFO(cFOLDER)
Serge
Re: Getfolder()
Posted: Fri Apr 06, 2018 8:16 am
by dominique_devuyst
Hi Serge,
Thanks for your answer.
It's a minigui, indeed.
I saw minigui.ch in the hmg\include folder, so I thought it was possible ... I like miracles.
So, my problem is :
Syntax of getfolder() is :
GetFolder ( [<cTitle>] , [<cInitPath>], [<cInvalidDataMsg>], [<lNewFolderButton>] , [<lIncludeFiles>] , [<nCSIDL_FolderType>] , [<nBIF_Flags>] )--> cSelectedFolderName
Code sample (with Img_path1 = "C:\Users\Gebruiker\Documents\Photos\") :
Code: Select all
msginfo('Le dossier des photos actuel est : '+Img_path1)
Img_path1 := GetFolder("Dossier de l'album photos",Img_path1,"nom invalide !",.F.,.F.,,)+"\"
msginfo('Le dossier des photos est maintenant : '+Img_path1)
My problem : GetFolder does not take into account the parameter Img_path1 and always give me 'Mycomputer' as initial path in the browse for folder window.
I make a mistake ? Or maybe is a bug in getfolder? In this case is there a patch?
Anyway I am looking for a solution : another function, a patch...
Have a nice weekend,
Dominique
Re: Getfolder()
Posted: Fri Apr 06, 2018 8:38 am
by serge_girard
Dominique,
First check if folder "C:\Users\Gebruiker\Documents\Photos\" exists.
In my PC it is called c:\gebruikers\gebruiker\....
The sample works with c:\test
Serge