Hi,
How I can use cGetFile to select more than one file?
Thanks.
cGetFile help
- MarcoBoschi
- Posts: 1077
- Joined: Thu Nov 17, 2005 11:08 am
- Location: Padova - Italy
- Contact:
Re: cGetFile help
Try this
Is not my code
Is not my code

Code: Select all | Expand
#include "Fivewin.ch" FUNCTION MAIN() LOCAL aFiles := CGETFILEEX( "Tutti i file (*.*)|*.*", "Select more files", , CURDRIVE() + ":\" + CURDIR() ) ? VALTYPE( aFiles ) IF VALTYPE( aFiles ) = "C" ? aFiles ELSE ? LEN( aFiles ) WQOUT( aFiles ) ENDIF RETURN NIL#pragma BEGINDUMP#include <windows.h>#include <hbapi.h>#include <clipapi.h>static WORD CharsToWord( LPSTR pChars ){ WORD w = 0; if( pChars[ 0 ] != '0' ) w = ( WORD ) ( ( pChars[ 0 ] - '0' ) * 10 ); if( pChars[ 1 ] != '0' ) w += ( WORD ) ( ( pChars[ 1 ] - '0' ) ); return w;}static WORD CharsToLong( LPSTR pChars ){ LONG l = 0; if( pChars[ 0 ] != '0' ) { l = ( ( pChars[ 0 ] - '0' ) * 100 ); l *= 10; // Borland C++ bug } if( pChars[ 1 ] != '0' ) l += ( ( pChars[ 1 ] - '0' ) * 100 ); if( pChars[ 2 ] != '0' ) l += ( ( pChars[ 2 ] - '0' ) * 10 ); if( pChars[ 3 ] != '0' ) l += ( pChars[ 3 ] - '0' ); return ( WORD ) l;}HB_FUNC( SETFTIME ) // ( nFileHandle, cTime, dDate ) --> lSuccess{ void * wHandle = ( void * ) hb_parnl( 1 ); SYSTEMTIME st; FILETIME ft; LPSTR pTime = hb_parc( 2 ); LPSTR pDate = IF( ISDATE( 3 ), hb_pards( 3 ), hb_parc( 3 ) ); _bset( ( char * ) &st, 0, sizeof( st ) ); if( pDate ) { st.wDay = CharsToWord( pDate + 6 ); st.wMonth = CharsToWord( pDate + 4 ); st.wYear = CharsToLong( pDate ); } if( pTime ) { st.wHour = CharsToWord( pTime ); st.wMinute = CharsToWord( pTime + 3 ); st.wSecond = CharsToWord( pTime + 6 ); st.wMilliseconds = 0; } SystemTimeToFileTime( &st, &ft ); hb_retl( SetFileTime( wHandle, &ft, &ft, &ft ) );}#pragma ENDDUMP #pragma BEGINDUMP #include "windows.h" #include "hbapi.h" #include <shlobj.h> //static far char IniDir[] = ".\\"; static char szDirName[ MAX_PATH ];// void cdecl _bcopy( void *, void *, unsigned int ); static far char Title[] = "Select the file"; HB_FUNC ( CGETFILEEX ) { OPENFILENAME ofn; char buffer[65536]; char cFullName[64][1024]; char cCurDir[512]; char cFileName[512]; int iPosition = 0; int iNumSelected = 0; int n; LPSTR pFile,pFilter,pTitle,pDir; WORD w = 0, wLen; int flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER ; //OFN_FILEMUSTEXIST | buffer[0] = 0 ; pTitle = ( LPSTR ) hb_xgrab( 128 ); if ( hb_pcount() > 1 && ISCHAR( 2 ) ) { wLen = ( WORD ) min( ( unsigned long ) 127, hb_parclen( 2 ) ); _bcopy( pTitle, hb_parc( 2 ), wLen ); * ( pTitle + wLen ) = 0; } else { pTitle = Title; } pDir = ( LPSTR ) hb_xgrab( 128 ); if ( hb_pcount() > 3 && ISCHAR( 4 ) ) { wLen = ( WORD ) min( ( unsigned long ) 127, hb_parclen( 4 ) ); _bcopy( pDir, hb_parc( 4 ), wLen ); * ( pDir + wLen ) = 0; } else { * ( pDir ) = 0; } pFile = ( LPSTR ) hb_xgrab( 255 ); if ( hb_pcount() > 7 && ISCHAR( 8 ) ) { wLen = ( WORD ) min( ( unsigned long ) 254, hb_parclen( 8 ) ); _bcopy( pFile, hb_parc( 8 ), wLen ); } else { wLen = ( WORD ) min( ( unsigned long ) 254, hb_parclen( 1 ) ); _bcopy( pFile, hb_parc( 1 ), wLen ); } * ( pFile + wLen ) = 0; pFilter = ( LPSTR ) hb_xgrab( 400 ); wLen = ( WORD ) min( ( unsigned long ) 398, hb_parclen( 1 ) ); _bcopy( pFilter, hb_parc( 1 ), wLen ); * ( pFilter + wLen ) = 0; while( * ( pFilter + w ) ) { if( * ( pFilter + w ) == '|' ) { * ( pFilter + w ) = 0; if ( hb_pcount() < 8 ) * (pFile) = 0; } w++; } * ( pFilter + wLen ) = 0; * ( pFilter + wLen + 1 ) = 0; memset( (void*) &ofn, 0, sizeof( OPENFILENAME ) ); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = GetActiveWindow(); ofn.lpstrFilter = pFilter; ofn.nFilterIndex = 1; ofn.lpstrFile = buffer; ofn.nMaxFile = sizeof(buffer); ofn.lpstrInitialDir = hb_parc(3); ofn.lpstrTitle = pTitle; ofn.nMaxFileTitle = 512; ofn.Flags = flags; if( GetOpenFileName( &ofn ) ) { if(ofn.nFileExtension!=0) { hb_retc( ofn.lpstrFile ); } else { wsprintf(cCurDir,"%s",&buffer[iPosition]); iPosition=iPosition+strlen(cCurDir)+1; do { iNumSelected++; wsprintf(cFileName,"%s",&buffer[iPosition]); iPosition=iPosition+strlen(cFileName)+1; wsprintf(cFullName[iNumSelected],"%s\\%s",cCurDir,cFileName); } while( (strlen(cFileName)!=0) && ( iNumSelected <= 63 ) ); if(iNumSelected > 1) { hb_reta( iNumSelected - 1 ); for (n = 1; n < iNumSelected; n++) { hb_storc( cFullName[n], -1, n ); } } else { hb_retc( &buffer[0] ); } } } else { hb_retc( "" ); } } INT CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData) { switch(uMsg) { case BFFM_INITIALIZED: if (szDirName) { // WParam is TRUE since you are passing a path. // It would be FALSE if you were passing a pidl. SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)szDirName); } break; } return 0; } #pragma ENDDUMP
Marco Boschi
info@marcoboschi.it
info@marcoboschi.it
- nageswaragunupudi
- Posts: 10733
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 11 times
- Contact:
Re: cGetFile help
FWH introduced function aGetFiles(...) in December 2009.
Extract from whatsnew.txt of December 2009
Extract from whatsnew.txt of December 2009
New: Function aGetFiles( cFileMask, cTitle, nDefaultMask, cInitDir ) --> aFiles, for selection of multiple files.
Please review FWH\source\winapi\getfiles.prg
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: cGetFile help
Hola:
No tengo este ejemplo con aGetfiles() en mi FWH.
Podriais subir un ejemplo práctico de la captura de varios ficheros y el posterior tratamiento de los mismos?
Muchas gracias
No tengo este ejemplo con aGetfiles() en mi FWH.
Podriais subir un ejemplo práctico de la captura de varios ficheros y el posterior tratamiento de los mismos?
Muchas gracias
- karinha
- Posts: 8019
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 8 times
- Contact:
- nageswaragunupudi
- Posts: 10733
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 11 times
- Contact:
Re: cGetFile help
pacotre wrote:Hola:
No tengo este ejemplo con aGetfiles() en mi FWH.
Podriais subir un ejemplo práctico de la captura de varios ficheros y el posterior tratamiento de los mismos?
Muchas gracias
Please try this small sample
Code: Select all | Expand
#include "fivewin.ch"function Main() local aFiles aFiles := aGetFiles( "Program files(*.prg)|*.prg|", ; // file mask "Select Multiple Prg files", ; // title , ; "c:\fwh\samples" ) // initial directory XBROWSER aFilesreturn nil


Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: cGetFile help
Muchas gracias. Lo he probado y me va a servir de mucho.
Ahora necesito saber como abrir una determinada carpeta que solo me muestre el contenido y pueda eliminar, copiar y pegar ficheros, pero no moverme fuera de ella.
Me explico mejor:
Cada expediente tiene una carpeta donde se guardan diferentes documentos (doc,jpg,pdf, etc etc). Lo que necesito es abrir esa carpeta y ver esos documentos y al mismo tiempo llamar a aGetFile que me permita buscar e incorporar otros documentos a esa carpeta, pero no quiero que el usuario pueda moverse de la carpeta del expediente, y eso no lo consigo con cGetFile o aGetfile.
Estoy dándole vueltas y no sé como hacerlo. Alguna ayuda?
Ahora necesito saber como abrir una determinada carpeta que solo me muestre el contenido y pueda eliminar, copiar y pegar ficheros, pero no moverme fuera de ella.
Me explico mejor:
Cada expediente tiene una carpeta donde se guardan diferentes documentos (doc,jpg,pdf, etc etc). Lo que necesito es abrir esa carpeta y ver esos documentos y al mismo tiempo llamar a aGetFile que me permita buscar e incorporar otros documentos a esa carpeta, pero no quiero que el usuario pueda moverse de la carpeta del expediente, y eso no lo consigo con cGetFile o aGetfile.
Estoy dándole vueltas y no sé como hacerlo. Alguna ayuda?
Re: cGetFile help
Lo pregunto de otra forma:
Puedo "encapsular" cGgetfile en un cuadro de dialogo, en cuyo dialogo pueda tener un segundo cgetfile?. En el primero, a la izquierda estarían mis documentos y en el otro, a la derecha donde buscar e incorporar al primero.
Espero vuestra ayuda.
Gracias
Puedo "encapsular" cGgetfile en un cuadro de dialogo, en cuyo dialogo pueda tener un segundo cgetfile?. En el primero, a la izquierda estarían mis documentos y en el otro, a la derecha donde buscar e incorporar al primero.
Espero vuestra ayuda.
Gracias
Re: cGetFile help
Bueno, pues visto que no hay respuesta, he seguido trabajando y lo estoy resolviendo de la siguiente forma:
Meto todos los ficheros en un Browse y genero un menupopup con todas las opciones posibles sobre cualquiera de los registros (abrir con Shellexecute, borrar, copiar mover o abrir un cgetFile para capturar e incorporar nuevos fichero), y hago otra pregunta.
Hay posibilidad de meter el cGetFile en un cuadro de Dialogo, donde mismo tengo el pequeño xBrowse?
Gracias
Meto todos los ficheros en un Browse y genero un menupopup con todas las opciones posibles sobre cualquiera de los registros (abrir con Shellexecute, borrar, copiar mover o abrir un cgetFile para capturar e incorporar nuevos fichero), y hago otra pregunta.
Hay posibilidad de meter el cGetFile en un cuadro de Dialogo, donde mismo tengo el pequeño xBrowse?
Gracias