Aquí os paso otro código gracioso, esto ya me cansa
Tenemos un DATEPIKER que cuando se pulse ENTER activará un TEXTBOX y le pondrá el focus.
Algo que funciona con cualquier otro control, pero con un DATEPIKER ..., no.., se lo salta. No le pone el focus.
Vale que puedo cambiar el orden de la entrada de datos, pero eso no es serio.
Si alguien sabe que puñetas pasa.., agradecido.
Muchas gracias a todos, y vamos con la cerveza.....
Code: Select all
*
* HMG - Harbour Win32 GUI library Demo
*
* Copyright 2002 Roberto Lopez <mail.box.hmg@gmail.com>
* http://www.hmgforum.com//
*
* MODIFICACION PARA VARIOS LOSTFOCU REALIZADA POR SARGANTANA.SOFT
* José Manuel Carbonell Bernabe
* SargantanaSoft@Gmail.com
* Petrer City - Alicante - Spain.
* ------------------------------------------
* 30 DE OCTUBRE DEL 2018 - AÑADIMOS COLORES.
* ------------------------------------------
* ----------------------------------------------------------
* PINTA EL FONDO DE LOS TEXTBOX, ANTIGUOS GET
* PINTA (nOpc,cColor1,cColor2)
* Forma de llamarla
* ON LOSTFOCUS PINTA(1,Colordepedir, Colordesalir)
* ON GOYFOCUS PINTA(2,Colordepedir, Colordesalir)
* nOpc -> 1 Pinta cuendo entra 2 Pinta cuando sale
* Parametros opcionales, Colordepedir, Colordesalir
* ------------------------------------------------------------
* ------------------------------------------
* 02 DE NOVIEMBRE DEL 2018 - AÑADIMOS UN CALENDARIO MES
* ------------------------------------------
* Esta función la he realizado al darme cuenta que el funcion MONTHCALENDAR cambia
* de apariencia dependiendo de la versión de WINDOW que estemos utilizando y teniendo
* que ajustar nuestros ".PRG" porque al Billy Puertas le de la gana.
* ------------------------------------------------------------
* --> Calendari(Ventana,nFil,ncol,dFecha,cColorNoMes,cColorMes,cColorDia,cColorDom)
* --> PARAMETROS
* --> Ventana -> Window propietaria
* --> nFil, nCol -> Fila y Columna donde mostraremos el calendario
* --> PARAMETROS OPCIONALES
* --> dFecha -> Opcional DATE()
* --> cColorNoMes -> Opcional, color del mes pasado o mes siguiente.
* --> cColorMes -> Opcional, color del mes de la fecha
* --> cColorDia -> Opcional, color del día
* --> cColorDom -> Opcional, color del Domingo
* ----------------------------------------------------------------------------
* 02 DE NOVIEMBRE DEL 2018 - AÑADIMOS ZEROS A UN NUMERO TRASFORMADO EN CADENA
* ------------------------------------------
* --> Transforma un numero en una cadena y rellena con ceros
* --> cStrZero( <nNum>, [<nLen>] )
* --> Parametros <nNum> es el número a transformar en cadena.
* --> <nLen> longitud máxima
* --> Return Número a cadena relleno de ceros
*/
#include "hmg.ch"
Function Main
SET NAVIGATION EXTENDED
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 640 HEIGHT 480 ;
TITLE 'HMG Demo' ;
MAIN
@ 10,10 TEXTBOX Text_1 VALUE 123 TOOLTIP 'Numeric TextBox' ;
NUMERIC MAXLENGTH 5 RIGHTALIGN ;
BACKCOLOR GREEN ;
ON GOTFOCUS PINTA( 1) ON LOSTFOCUS PINTA( 2)
@ 40,10 TEXTBOX Text_2 VALUE "123" TOOLTIP ' TextBox' ;
MAXLENGTH 5 RIGHTALIGN READONLY ;
ON GOTFOCUS PINTA( 1) ON LOSTFOCUS PINTA( 2)
@ 70,10 TEXTBOX Text_3 VALUE 123 TOOLTIP 'Numeric TextBox' ;
NUMERIC MAXLENGTH 5 RIGHTALIGN ;
ON GOTFOCUS PINTA( 1) ON LOSTFOCUS PINTA( 2)
//--> Cuando pulse ENTER tiene que activar el TEXT_4 y ponerle el foco...., y una mierda!!
@ 100,10 DATEPICKER Get03 TOOLTIP "FECHA DEL ALBARAN" VALUE DATE() FORMAT "dd/MM/yyyy" ;
ON ENTER PONE_TEXT4()
@ 130,10 TEXTBOX Text_4 VALUE 123 TOOLTIP 'Numeric TextBox' ;
NUMERIC MAXLENGTH 5 RIGHTALIGN ;
ON GOTFOCUS PINTA( 1) ON LOSTFOCUS PINTA( 2)
@ 10,200 TEXTBOX Text_5 ;
VALUE ctod('01/01/2004') ;
TOOLTIP 'Date TextBox 1' ;
DATE ON GOTFOCUS PINTA( 1) ON LOSTFOCUS PINTA( 2)
@ 40,200 TEXTBOX Text_6 ;
VALUE Date() ;
TOOLTIP 'Date TextBox 2' ;
DATE ON GOTFOCUS PINTA( 1) ON LOSTFOCUS PINTA( 2)
CALENDARI("Form_1",240,350)
DEFINE EDITBOX Edit_1
ROW 10
COL 350
WIDTH 120
HEIGHT 110
VALUE ""
ONGOTFOCUS PINTA( 1)
ONLOSTFOCUS PINTA( 2)
END EDITBOX
DEFINE COMBOBOX Combo_1
ROW 150
COL 350
WIDTH 200
HEIGHT 100
ITEMS {"Item 1","Item 2","Item 3"}
VALUE 0
ONGOTFOCUS PINTA( 1)
ONLOSTFOCUS PINTA( 2)
DISPLAYEDIT .T. // must be .T. for cuebanner
END COMBOBOX
DEFINE SPINNER Spinner_1
ROW 200
COL 350
WIDTH 200
HEIGHT 24
RANGEMIN 1
RANGEMAX 10
VALUE "" // must be "" for cuebanner
ONGOTFOCUS PINTA( 1)
ONLOSTFOCUS PINTA( 2)
END SPINNER
DEFINE RICHEDITBOX RichEdit_1
ROW 330
COL 175
WIDTH 120
HEIGHT 90
VALUE ""
ONGOTFOCUS PINTA( 1)
ONLOSTFOCUS PINTA( 2)
END RICHEDITBOX
@ 350, 10 BUTTON Button_1 CAPTION "Click" ACTION MsgInfo ("Hello")
@ 400, 10 BUTTON Button_2 CAPTION "Minimize" ACTION Form_1.Minimize
END WINDOW
Form_1.Text_4.Enabled:=.F.
Form_1.Center
Form_1.Text_1.Setfocus
Form_1.Activate
Return Nil
PROC PONE_TEXT4
MSGBOX("ACTIVO EL CUATRO Y PONGO FOCO")
Form_1.Text_4.Enabled:=.T.
Form_1.Text_4.Setfocus
RETURN
//----------------------------------------------------------
//-- PINTA EL FONDO DE LOS TEXTBOX, ANTIGUOS GET
//-- Forma de llamarla
//-- ON LOSTFOCUS PINTA(nOpc,Colordepedir, Colordesalir)
//-- nOpc -> 1 Pinta cuendo entra 2 Pinta cuando sale
//-- Parametros opcionales, Colordepedir, Colordesalir
//------------------------------------------------------------
PROC Pinta(nOpc,Color_P,Color_S)
LOCAL A := GetLastActiveFormIndex ()
LOCAL i := GetLastActiveControlIndex ()
LOCAL cWin:=ThisWindow.Name
DEFAULT Color_p:=COLOR_LightBlue
DEFAULT Color_s:=WHITE
IF A > 0
* cWin:=(_HMG_SYSDATA [66] [A])
* IF !EMPTY(GetProperty( cWin , 'FocusedControl'))
if nOpc=1
SETPROPERTY(cWin,This.focusedControl,"BACKCOLOR", Color_p)
ELSE
SETPROPERTY(cWin,_HMG_SYSDATA [2] [i],"BACKCOLOR", Color_s)
ENDIF
* ENDIF
ENDIF
RETURN
//-------------------------------------------------------------
//-------------------------------------------------------------
// --> FUNCION GENERICA PARA MOSTRAR UN CALENDARIO OPERATIVO
//-------------------------------------------------------------
//--> Calendari(Ventana,nFil,ncol,dFecha,cColorNoMes,cColorMes,cColorDia,cColorDom)
//--> PARAMETROS
//--> Ventana -> Window propietaria
//--> nFil, nCol -> Fila y Columna donde mostraremos el calendario
//--> PARAMETROS OPCIONALES
//--> dFecha -> Opcional DATE()
//--> cColorNoMes -> Opcional, color del mes pasado o mes siguiente.
//--> cColorMes -> Opcional, color del mes de la fecha
//--> cColorDia -> Opcional, color del día
//--> cColorDom -> Opcional, color del Domingo
PROC Calendari(Ventana,nFil,ncol,dFecha,cColorNoMes,cColorMes,cColorDia,cColorDom)
LOCAL nWeek,nDay,cTB
LOCAL aDia:={"Lu","Ma","Mi","Ju","Vi","Sa","Do"}
DEFAULT nFil:=nCol:=1
DEFAULT dFecha:=DATE()
DEFAULT cColorNomes:=GRAY
DEFAULT cColorMes:=BLUE
DEFAULT ccolorDia:=BLACK
DEFAULT cColorDom:=RED
@ nFil,ncol LABEL LBTras VALUE "<<" WIDTH 30 CENTERALIGN BOLD;
ACTION (Restames(@dFecha), Carga_cal(Ventana,dFEcha,cColorNoMes,cColorMes,cColorDia,cColorDom))
@ nFIL,ncol+50 LABEL Fecha1 VALUE dFecha WIDTH 70 FONTCOLOR BLUE CENTERALIGN
@ nFil,ncol+140 LABEL LBAdel VALUE ">>" WIDTH 30 CENTERALIGN BOLD ;
ACTION (dFecha:=Sumames(dFecha), Carga_cal(Ventana,dFEcha,cColorNoMes,cColorMes,cColorDia,cColorDom))
nFil += 60
FOR nWeek = 1 to 6
FOR nDay = 1 to 7
// --> Pongo los nombres de los dias de la semana
IF nWeek=1
cTb="cTbd_"+cStrZero(nWeek,1)+cStrZero(nDay,1)
@ nFil-30,nCol+(25*(nDay-1)) LABEL &cTb CENTERALIGN VALUE aDia[nDay] WIDTH 20
ENDIF
// --> Por los dias del mes
cTb="cTb_"+cStrZero(nWeek,1)+cStrZero(nDay,1)
@ nFil+(20*(nWeek-1)) , nCol+(25*(nDay-1)) LABEL &cTb CENTERALIGN TRANSPARENT VALUE " " WIDTH 20 ;
ACTION Cambia_dia(Ventana,This.Value,@dFecha,cColorNoMes,cColorMes,cColorDia,cColorDom)
NEXT
NEXT
@ nFil+(20*(nWeek-1)) ,ncol+50 LABEL dhoy VALUE " HOY " WIDTH 70 FONTCOLOR BLUE CENTERALIGN ;
ACTION (dFecha:=DATE(), Carga_cal(Ventana,dFEcha,cColorNoMes,cColorMes,cColorDia,cColorDom))
CARGA_CAL(Ventana,dFecha,cColorNoMes,cColorMes,cColorDia,cColorDom)
RETURN
STATIC PROC CARGA_CAL(Ventana,dFecha,cColorNoMes,cColorMes,cColorDia,cColorDom)
LOCAL cTB
LOCAL dBoM, dStart
LOCAL nWeek, nDay
* LOCAL cWin:=ThisWindow.Name
DEFAULT dFecha:=DATE()
dBoM = dFecha - Day( dFecha ) + 1
dStart = If( DoW( dBoM ) != 1, dBoM - DoW( dBoM ) + 2, dBoM - 6 )
SETPROPERTY(Ventana,"Fecha1","Value",dFecha)
FOR nWeek = 1 to 6
FOR nDay = 1 to 7
cTb="cTb_"+cStrZero(nWeek,1)+cStrZero(nDay,1)
SETPROPERTY(Ventana,cTb,"Value",cStrZero(Day( dStart ),2) )
SETPROPERTY(Ventana,cTb,"BACKCOLOR",WHITE)
SETPROPERTY(Ventana,cTb,"FONTCOLOR",IF( Month( dStart ) == Month( dFecha ),If( dStart == dFecha, cColorDia, cColorMes ), cColorNomes ) )
IF nDay = 7 .AND. Month( dStart ) == Month( dFecha ) .AND. dStart!=dFecha //--> DOMINGOOOOL
SETPROPERTY(Ventana,ctb,"FONTCOLOR",cColorDom)
ENDIF
IF dStart!=dFecha
SETPROPERTY(Ventana,cTb,"TRANSPARENT",.F.)
SETPROPERTY(Ventana,cTb,"BACKCOLOR",YELLOW)
ENDIF
dStart++
NEXT
NEXT
RETURN
//------------------------------------------------------------------------------------
STATIC PROC Cambia_DIA(Ventana,cDia,dFecha,cColorNoMes,cColorMes,cColorDia,cColorDom)
local dBoM, dStart, nDif
LOCAL i := GetLastActiveControlIndex ()
LOCAL aColor
dBoM = dFecha - Day( dFecha ) + 1
dStart = If( DoW( dBoM ) != 1, dBoM - DoW( dBoM ) + 2, dBoM - 6 )
// --> Compruebo si he tocado el mes anterior o el siguiente
aColor:=GETPROPERTY(Ventana,_HMG_SYSDATA [2] [i],"FONTCOLOR")
IF aColor[1]=cColorNoMes[1] .AND. aColor[2]=cColorNomes[2] .AND. aColor[3]=cColorNomes[3]
IF VAL(cDia) > 20
dFecha:=RestaMes(dFecha)
ELSE
dFecha:=Sumames(dFecha)
ENDIF
ENDIF
// --> Voy a poner el dia que corresponde
IF VAL(cDia) > DAY(dFecha)
nDif=VAL(cDia)-DAY(dFecha)
dFecha=dFecha+nDif
ELSE
nDif=DAY(dFecha)-VAL(cDia)
dFecha=dFecha-nDif
ENDIF
Carga_cal(Ventana,dFEcha,cColorNoMes,cColorMes,cColorDia,cColorDom)
RETURN
// ----------------------------------------------------------------------------
static function SumaMes( dFecha )
local dTemp := dFecha
local nMonth := Month( dFecha )
while Month( dTemp++ ) == nMonth
enddo
return --dTemp + Day( dFecha ) - 1
// ----------------------------------------------------------------------------
static function RestaMes( dFecha )
local nDay := Day( dFecha )
dFecha -= Day( dFecha )
dFecha -= Day( dFecha )
return dFecha + nDay
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// --> Transforma un numero en una cadena y rellena con ceros
// --> cStrZero( <nNum>, [<nLen>] )
// --> Parameteros <nNum> es el número a transformar en cadena.
// --> <nLen> longitud máxima
// --> Return Número a cadena relleno de ceros
FUNCTION cStrZero( nNum, nLen )
local cSal, nSigno, nDe
IF nNum < 0
nSigno = - 1
nNum = nNum * -1
ELSE
nSigno = 1
ENDIF
nDe=AT(".",STR(nNum))
IF nDe!=0
nDe=LEN(STR(nNum))-nDe
ENDIF
if nLen == nil
cSal = StrTran( Str( nNum ), " ", "0" )
else
cSal = StrTran( Str( nNum, nLen, nDe ), " ", "0" )
endif
IF nSigno=-1
cSal = "-"+SUBSTR(cSal,2)
ENDIF
return cSal