FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Wed May 01, 2013 05:10 AM

Como puedo indicarle a cGetFile32() que le ponga autom谩ticamente la extensi贸n al archivo.

Seg煤n encontr茅 en internet ser铆a con la bandera:

define OFN_ADDEXTENSION 32

pero, o no he atinado donde meterla, o no funciona.

Saludos

Quique
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Wed May 01, 2013 02:28 PM
hola

la funcion esta en

C:\fwh\source\function\dlgs32.prg
C:\fwh\source\winapi\getfile.c


deberas probar, yo no lo he probado
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 03:13 AM

Gracias, pero no me sirvi贸 de mucho, no se C, asi que ni para monitorear, aunque lo intent茅 con la funci贸n cgetfile de fivewin y con la que pusieron en el foro para multiples archivos, con ninguna funcion贸.

Saludos

Quique
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 08:03 AM

Quique
A mi la funcion cGetFile32( "*.PRG", "Fichero", 1, ".\" ) me devuelve el fichero seleccionado con el PATH y la Extension del fichero
Si lo que necesitas es que ponga la extension del fichero seleccionado en el dialogo de seleccion, creo que eso es una propiedad de las carpetas de Windows ("Ocultar Extensiones de Ficheros conocidos" o algo asi.
Seguramente no te he entendido lo que necesitas
Un saludo

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 12:45 PM

Nop, lo que necesito es que me ponga la extensi贸n autom谩ticamente, por ejemplo, si en word indico que el archivo se llame miArchivo, lo guarda autom谩ticamente con la extensi贸n miArchivo.doc o la extensi贸n del formato que haya seleccionado en el dialogo de buscar archivo.

En el caso de fivewin no le pone la extensi贸n, y no se que extensi贸n es la que se seleccione, ahorita si el archivo no tiene extensi贸n se la pongo manualmente, pero no puedo dar a escoger extensiones porque no sabr铆a cual poner.

Seg煤n lo que he encontrado en internet, deber铆a poderse pero con fivewin no lo he conseguido.

Saludos

Quique
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 01:31 PM
Quique,

En FWH/source/winapi/getfile.c busca por:

ofn.Flags

y modificalo asi:

Code (fw): Select all Collapse
 聽 ofn.Flags 聽 聽 聽 聽 聽 = OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR | OFN_ADDEXTENSION | 
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 IF( bSave, OFN_HIDEREADONLY, 0 ) |
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 IF( bLongNames, OFN_LONGNAMES, 0 );
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 01:34 PM
Quique,
Y ya probaste de esta forma:

Code (fw): Select all Collapse
cFile := cGetFile( 聽 聽"HOJA EXCEL (*.xls)| *.xls|" 聽;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ,"Por Favor Seleccione el archivo xls" )


Saludos.

Carlos.
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 02:04 PM

Antonio, no funciona, sigue devolviendo nombre sin extensi贸n.

Carlos, sip, lo hago de manera parecida, la idea es que si le pongo como nombre hoja, autom谩ticamente me devuelva hoja.xls.

Saludos

Quique
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 03:59 PM
Quique:

Tengo esto y me devuelve el archivo y su extensi贸n
Code (fw): Select all Collapse
        REDEFINE BTNGET oGet VAR cFile ID 100 OF oDlg RESOURCE "Buscar" UPDATE;
            PICTURE "@!K";
            ACTION (cFile := ALLTRIM(cGetFile("*.Txt","Seleccione el archivo a importar",1,".\Importar")),;
            oDlg:UPDATE())


Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 04:44 PM

aunque no le indiques la extensi贸n del archivo?

por ejemplo, en lugar de seleccionar el archivo con el rat贸n escribes en donde indicas el archivo miArchivo, te devuelve "miArchivo.txt" o simplemente "miArchivo"

Saludos

Quique
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 04:54 PM

Quique:

Tienes raz贸n, si escribo solo el nombre no me devuelve la extensi贸n :shock:

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 07:15 PM
Hola, mira se ayuda con este ejemplo: Graba en c:\fwh..\samples y compila.

Code (fw): Select all Collapse
// Shows how to change from Oem to Ansi and viceversa

/*
脷脛 Programa 脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛驴
鲁   Aplicaci垄n: Cambia de Formato Oem a Ansi y viceversa                   鲁
鲁      Fichero: DBFW.PRG                                                   鲁
脌脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脛脵
*/

#include "fivewin.ch"

#define OEM_TO_ANSI      1
#define ANSI_TO_OEM      2
#define MAX_CHECK       10

Static oWnd, oMeter, oAtoO, oOtoA
Static nActual := 0

//----------------------------------------------------------------------------//

FUNCTION Main()

     LOCAL oIcon

     DEFINE ICON oIcon RESOURCE "ICON_DBFW"

     //MsgInfo( If( IsAnsi( "Hola" ), "Ok", "No" ) )

     DEFINE WINDOW oWnd FROM 1, 1 TO 12, 60 ;
          TITLE OemToAnsi("Conversi垄n de Ficheros DBF") ;
          ICON oIcon ;
          BORDER NONE ;
          COLOR "B/W" ;
          NOZOOM

     WndCenter(oWnd:hWnd)

     ACTIVATE WINDOW oWnd ;
          ON INIT Showcontrols()

RETURN (NIL)

//----------------------------------------------------------------------------//

STATIC FUNCTION ShowControls()

     @ 02,01 METER oMeter VAR nActual TOTAL 100 ;
          SIZE 455,20 ;
          OF oWnd

     @ 5,12 BUTTON oOtoA PROMPT "&Oem to Ansi" ;
           DEFAULT ;
           OF oWnd ;
           ACTION Conversion(OEM_TO_ANSI) ;
           SIZE 100,25

     @ 5,40 BUTTON oAtoO PROMPT "&Ansi to Oem" ;
           DEFAULT ;
           OF oWnd ;
           ACTION Conversion(ANSI_TO_OEM) ;
           SIZE 100,25


RETURN (NIL)

//----------------------------------------------------------------------------//

STATIC FUNCTION Conversion(nType)

     LOCAL aData
     LOCAL bBlock
     LOCAL cFichero, cCaption
     LOCAL nTotal, nMeter

     cFichero := GetFichero()

     IF empty(cFichero)
          RETURN NIL
     ENDIF

     oAtoO:disable()
     oOtoA:disable()

     cCaption := oWnd:cCaption

     oWnd:cTitle({"Oem to Ansi","Ansi to Oem"} [nType] + ;
                 ":  ["+SubStr(cFichero, Rat("\",cFichero)+1)+"]")


     IF nType == OEM_TO_ANSI

          bBlock := {|val,elem| iif(Valtype(Val)=="C"             ,;
                                    Fieldput(elem,OemtoAnsi(val)) ,;
                                    NIL ) }

     ELSE

          bBlock := {|val,elem| iif(Valtype(Val)=="C"             ,;
                                    Fieldput(elem,AnsitoOem(val)) ,;
                                    NIL ) }

     ENDIF

     USE (cFichero) NEW EXCLUSIVE
     SET INDEX TO

     IF CheckRec(nType,cFichero)

          oWnd:cTitle(cCaption)
          oAtoO:enable()
          oOtoA:enable()

          CLOSE ALL
          RETU NIL

     ENDIF

     GO TOP

     nTotal := lastrec()

     oMeter:nTotal = RecCount()

     DO WHILE !EOF()

          aData := Scatter()

          Aeval(aData ,bBlock)

          SKIP

          oMeter:Set( RecNo() )
          SysRefresh()
     ENDDO

     GO TOP

     BROWSE()

     CLOSE ALL

     MsgBeep()

     oMeter:Set(0)
     oWnd:cTitle(cCaption)
     oAtoO:enable()
     oOtoA:enable()

RETURN (NIL)

//----------------------------------------------------------------------------//

STATIC FUNCTION GetFichero()

     LOCAL cFile //:= ""

     LOCAL cDbfNome := "CUSTOMER" + ".DBF"

     cFile    := cFilePath( cDbfNome ) //+ cFileNoExt( cDbfNome )
     cFile    := ALLTRIM( cFile )

     /*
     cFile := cGetFile("*.dbf"           ,;
                       "Elija la base de datos")
     */

     cFile := cGetFile( cDbfNome )

     IF "*"$cFile .OR. !file(cFile)
          cFile := ""
     ENDIF

Return (cFile)

//----------------------------------------------------------------------------//

STATIC Function scatter()

     local fvals := {} , fnum := 1

     Asize(fvals,fcount())

     aeval(fvals, {|| fvals[fnum++] := fieldget(fnum)})

Return(fvals)

//----------------------------------------------------------------------------//

STATIC Function CheckRec(nType, cFichero)


     LOCAL aData
     LOCAL bBlock
     LOCAL nCounter := 0
     LOCAL lAlert   := .F.

     IF nType == OEM_TO_ANSI

          bBlock := {|val| iif(Valtype(Val)=="C" .AND. IsAnsi(val) ,;
                               lAlert := .T.                       ,;
                               NIL ) }

     ELSE

          bBlock := {|val| iif(Valtype(Val)=="C" .AND. IsOem(val)  ,;
                               lAlert := .T.                       ,;
                               NIL ) }

     ENDIF

     CursorWait()

     DO WHILE !Eof() .OR. nCounter <= MAX_CHECK

          aData := Scatter()

          Aeval(aData ,bBlock)

          IF lAlert
               EXIT
          ENDIF

          SKIP

          nCounter++

     ENDDO

     GO TOP

     CursorArrow()

     IF lAlert

          lAlert := !MsgYesNo(OemtoAnsi("篓Ya esta en formato ")+;
                              {"Ansi","Oem"}[nType]+", desea Continuar?",;
                              cFichero)

     ENDIF

RETURN lAlert

//----------------------------------------------------------------------------//


Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 08:53 PM

Mismo resultado, no pone extensi贸n por defecto, aunque con solo ver el c贸digo era de esperar, lo prob茅 tal como lo pusiste y tambi茅n utilizando el cGetFile que tienes comentado.

Tal como lo tienes es m谩s l贸gico que no la ponga, porque utilizas un nombre completo, en el segundo caso se utiliza *.dbf, que ser铆a la extensi贸n tendr铆a que a帽adir si no se especifica, pero no lo hace.

Saludos

Quique
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 09:19 PM

Quique:

Una chapuza, si despu茅s de recibir el nombre del archivo validas si trae extensi贸n, en caso de que
no la traiga, se la pegas !.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Agregar la extensi贸n autom谩ticamente a cGetFile32()
Posted: Thu May 02, 2013 09:42 PM

Eso es f谩ci si solamente tienes una opci贸n ("Proyectos (.pry)|.pry|Todos|.") 驴pero que pasa si tienes varias opciones ("Fuentes (.prg)|.prg|Cabecera (.ch)|.ch|Recursos (.rc)|.rc|Todos|.")?

Saludos

Quique

Continue the discussion