Hi,
How I can use cGetFile to select more than one file?
Thanks.
cGetFile help
- MarcoBoschi
- Posts: 925
- 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
#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: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- 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
Re: cGetFile help
João Santos - São Paulo - Brasil
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: cGetFile help
Please try this small samplepacotre 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
Code: Select all
#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 aFiles
return 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