Re: COLOR EN TEXTBOX
Posted: Thu Nov 01, 2018 5:29 pm
I'm in !Prefiero una copa de vino tinto !
Exclusive forum for HMG, a Free / Open Source xBase WIN32/64 Bits / GUI Development System
http://www.hmgforum.com/
I'm in !Prefiero una copa de vino tinto !
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 la función 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
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 ;
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)
@ 100,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.Center
Form_1.Text_1.Setfocus
Form_1.Activate
Return Nil
//----------------------------------------------------------
//-- 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
Code: Select all
*
* (c) by Sarganta Soft Corp. Petrer City (Alicante) - ESPAÑA
* José Manuel Carbonell
* email : SargantanaSoft@gmail.com
*
* Pinta(1) PARA ENTRAR
* Pinta(2) PARA SALIR
*
* MODIFICACION PARA PINTAR LOS TEXTBOX Y LOS LABEL
* PARA UN CORRECTO FUNCIONAMIENTO EL TEXTBOX SERA GET_nn y el LABEL GET_nn
*
*/
#include "hmg.ch"
Function Main
Local aRows [20] [3]
LOCAL nIdioma:=1
LOCAL sFont:="Arial"
LOCAL sSize:=10
LOCAL gFont:="Arial"
LOCAL gSize:=10
aRows [1] := {'Simpson','Homer','555-5555'}
aRows [2] := {'Mulder','Fox','324-6432'}
aRows [3] := {'Smart','Max','432-5892'}
aRows [4] := {'Grillo','Pepe','894-2332'}
aRows [5] := {'Kirk','James','346-9873'}
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 640 HEIGHT 480 ;
TITLE 'HMG Demo' ;
MAIN
DEFINE MAIN MENU
DEFINE POPUP 'Test'
MENUITEM 'Get Button Caption' ACTION MsgInfo ( Form_1.Tab_1(1).Button_1.Caption )
MENUITEM 'Set Button Caption' ACTION Form_1.Tab_1(1).Button_1.Caption := 'New'
SEPARATOR
MENUITEM 'Get Grid Header' ACTION MsgInfo ( Form_1.Tab_1(4).Grid_1.Header(1) )
MENUITEM 'Set Grid Header' ACTION Form_1.Tab_1(4).Grid_1.Header(1) := 'New'
SEPARATOR
MENUITEM 'Set Grid Cell' ACTION Form_1.Tab_1(4).Grid_1.Cell(1,1) := 'New'
MENUITEM 'Get Grid Cell' ACTION MsgInfo ( Form_1.Tab_1(4).Grid_1.Cell(1,1) )
SEPARATOR
MENUITEM 'Show Button' ACTION Form_1.Tab_1(1).Button_1.Show()
MENUITEM 'Hide Button' ACTION Form_1.Tab_1(1).Button_1.Hide()
END POPUP
END MENU
DEFINE TAB Tab_1 ;
AT 10,10 ;
WIDTH 600 ;
HEIGHT 400 ;
VALUE 1 ;
TOOLTIP 'Tab Control'
PAGE 'Page 1' IMAGE "exit.bmp"
@ 30 , 10 LABEL SAY_02 VALUE IF(nIdioma=1,"Razón social","Company name") TRANSPARENT AUTOSIZE FONT sFont SIZE sSize
@ 60 , 10 LABEL SAY_03 VALUE IF(nIdioma=1,"Nombre","Name") TRANSPARENT AUTOSIZE FONT sFont SIZE sSize
@ 90 , 10 LABEL SAY_04 VALUE IF(nIdioma=1,"Dirección","Adress") TRANSPARENT AUTOSIZE FONT sFont SIZE sSize
@ 120, 10 LABEL SAY_05 VALUE IF(nIdioma=1,"Población","Tows") TRANSPARENT AUTOSIZE FONT sFont SIZE sSize
@ 30,130 TEXTBOX Get_02 VALUE " " WIDTH 250 FONT gFont SIZE gSize MAXLENGTH 35 ;
ON GOTFOCUS PINTA(1) ON LOSTFOCUS PINTA(2)
@ 60,130 TEXTBOX Get_03 VALUE " " WIDTH 250 FONT gFont SIZE gSize MAXLENGTH 35 ;
ON GOTFOCUS PINTA(1) ON LOSTFOCUS PINTA(2)
@ 90,130 TEXTBOX Get_04 VALUE " " WIDTH 250 FONT gFont SIZE gSize MAXLENGTH 35 ;
ON GOTFOCUS PINTA(1) ON LOSTFOCUS PINTA(2)
@ 120,130 TEXTBOX Get_05 VALUE " " WIDTH 250 FONT gFont SIZE gSize MAXLENGTH 35;
ON GOTFOCUS PINTA(1) ON LOSTFOCUS PINTA(2)
END PAGE
PAGE 'Page &2' IMAGE "info.bmp"
DEFINE RADIOGROUP R1
ROW 100
COL 100
OPTIONS { '1','2','3' }
VALUE 1
END RADIOGROUP
END PAGE
PAGE 'Page 3' IMAGE "check.bmp"
@ 100,250 SPINNER Spinner_1 ;
RANGE 0,10 ;
VALUE 5 ;
WIDTH 100 ;
TOOLTIP 'Range 0,10' ;
ON CHANGE PlayBeep()
END PAGE
PAGE 'Page 4' IMAGE "button.bmp"
@ 50,50 GRID Grid_1 ;
WIDTH 200 ;
HEIGHT 330 ;
HEADERS {'Last Name','First Name','Phone'} ;
WIDTHS {140,140,140};
ITEMS aRows ;
VALUE 1
END PAGE
END TAB
END WINDOW
Form_1.Center
Form_1.Activate
Return Nil
//----------------------------------------------------------
//-- PINTA EL FONDO DE LOS TEXTBOX, ANTIGUOS GET
//-- Forma de llamarla
//-- ON LOSTFOCUS PINTA(Colordepedir, Colordesalir)
//-- Parametros opcionales
//------------------------------------------------------------
PROC Pinta(nOpc,Color_P,Color_S)
LOCAL A := GetLastActiveFormIndex ()
LOCAL i := GetLastActiveControlIndex ()
LOCAL cWin:=""
DEFAULT Color_p:=COLOR_Cyan
DEFAULT Color_s:=WHITE
IF A > 0
cWin:=(_HMG_SYSDATA [66] [A])
if nOpc=1
SETPROPERTY(cWin,This.focusedControl,"BACKCOLOR", Color_p)
cCtrl="Say_"+SUBSTR(This.focusedcontrol,5,2)
IF IsControlDefined (&cCtrl,&cWin )
SETPROPERTY(cWin,cCtrl,"FONTCOLOR", RED)
ENDIF
ELSE
SETPROPERTY(cWin,_HMG_SYSDATA [2] [i],"BACKCOLOR", Color_s)
cCtrl="Say_"+SUBSTR(_HMG_SYSDATA [2] [i],5,2)
IF IsControlDefined ( &cCtrl ,&cWin )
SETPROPERTY(cWin,cCtrl,"FONTCOLOR", BLACK)
ENDIF
ENDIF
ENDIF
RETURN