cGetFile help

Post Reply
Wanderson
Posts: 332
Joined: Thu Nov 17, 2005 9:11 pm

cGetFile help

Post by Wanderson »

Hi,

How I can use cGetFile to select more than one file?

Thanks.
User avatar
MarcoBoschi
Posts: 1077
Joined: Thu Nov 17, 2005 11:08 am
Location: Padova - Italy
Contact:

Re: cGetFile help

Post by MarcoBoschi »

Try this

Is not my code 8)

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
User avatar
nageswaragunupudi
Posts: 10733
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 11 times
Contact:

Re: cGetFile help

Post by nageswaragunupudi »

FWH introduced function aGetFiles(...) in 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
pacotre
Posts: 40
Joined: Fri Jan 10, 2014 10:38 am

Re: cGetFile help

Post by pacotre »

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
User avatar
karinha
Posts: 8019
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 8 times
Contact:

Re: cGetFile help

Post by karinha »

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
nageswaragunupudi
Posts: 10733
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 11 times
Contact:

Re: cGetFile help

Post by nageswaragunupudi »

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 


Image

Image
Regards

G. N. Rao.
Hyderabad, India
pacotre
Posts: 40
Joined: Fri Jan 10, 2014 10:38 am

Re: cGetFile help

Post by pacotre »

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?
pacotre
Posts: 40
Joined: Fri Jan 10, 2014 10:38 am

Re: cGetFile help

Post by pacotre »

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
pacotre
Posts: 40
Joined: Fri Jan 10, 2014 10:38 am

Re: cGetFile help

Post by pacotre »

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
Post Reply