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.
ofn.Flags = OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR | OFN_ADDEXTENSION |
IF( bSave, OFN_HIDEREADONLY, 0 ) |
IF( bLongNames, OFN_LONGNAMES, 0 );
cFile := cGetFile( "HOJA EXCEL (*.xls)| *.xls|" ;
,"Por Favor Seleccione el archivo xls" )
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())
// 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
//----------------------------------------------------------------------------//
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: AngelSalom and 57 guests