by José Camilo » Sun Jun 16, 2024 6:31 am
Hola Antonio!!!
Gracias x tu tiempo.
aqui va el codigo que comence a modificar.
// FiveWin MsgDate() function sample
#include "FiveWin.ch"
Static oWnd
FUNCTION Main()
SET 3DLOOK ON
SET EPOCH TO 1950
SET CENTURY ON
SET DATE FORMAT TO "DD/MM/YYYY"
DEFINE WINDOW oWnd FROM 1, 1 TO 12, 32 TITLE "TEST" MENU MakeMenu()
ACTIVATE WINDOW oWnd
RETURN( NIL )
Function MakeMenu()
Local oMenu
MENU oMenu
MENUITEM '&Menu'
MENU
MENUITEM "&1 MsgDate (Use DATE())" ACTION MsgInfo(MsgDate(DATE()), "Date Returned")
MENUITEM "&2 MsgDate (Use 03/25/97)" ACTION MsgInfo(MsgDate(TToD("03/25/97", "MM/DD/YY")), "Date Returned")
MENUITEM "&3 MsgDate (Use 2002/11/24)" ACTION MsgInfo(MsgDate(TToD("2002/11/24", "YYYY/MM/DD")), "Date Returned")
ENDMENU
ENDMENU
Return (oMenu)
//----------------------------------------------------------------------------//
function MsgDate( dDate, cPrompt, oGet )
local oDlg, oFont, oCursor, dSelect, dWork
local nRow, nCol, nMonth, nYear
local aMonths := {'Enero ',;
'Febrero ',;
'Marzo ',;
'Abril ',;
'Mayo ',;
'Junio ',;
'Julio ',;
'Agosto ',;
'Septiembre',;
'Octubre ',;
'Noviembre ',;
'Diciembre '}
local aDays := {"Dom","Lun","Mar","Mie","Jue","Vie","Sab"}
local nLin := 0
local nColu := 0
DEFAULT dDate := Date(), cPrompt := "Seleccione Una Fecha"
//FOR nMonth = 1 to 12
// AADD( aMonths, cMonth(TToD( "01/" + padl( nMonth, 2 ) + "/98", "DD/MM/YY" )))
//NEXT nMonth
use feriados index feriado1 new
cLongDate := dDateToString( dDate )
cLongFecha := verfecha( dDate )
cCYear := str(year(dDate), 4)
nYear := Year( dDate )
nMonth := Month( dDate )
dSelect := dDate
dWork := TToD( "01/" + padl( nMonth, 2 ) + "/" + ;
right( cCYear, 2), "DD/MM/YY" )
while DoW( dWork ) > 1
dWork --
enddo
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -14
DEFINE FONT oFont2 NAME "Ms Sans Serif" SIZE 0, -18
DEFINE FONT oFont3 NAME "Courier New" SIZE 0, -18 BOLD
DEFINE FONT oFont4 NAME "ARIAL BLACK" SIZE 0, -22 BOLD
DEFINE DIALOG oDlg SIZE 400, 340 TITLE cPrompt FONT oFont // -> 6 Semanas
@ 0.2, .75 COMBOBOX nMonth ITEMS aMonths SIZE 60,100 OF oDlg FONT oFont2;
ON CHANGE MoveCalendar(oDlg, 1, nMonth )
@ 3.1, 86 BTNBMP PROMPT "-" SIZE 12, 12 ACTION ( MoveCalendar(oDlg, 3 ))
@ 3.4, 150 BTNBMP PROMPT "+" SIZE 12, 12 ACTION ( MoveCalendar(oDlg, 4 ))
@ 0.3, 12.3 GET nYear SIZE 40, 12 OF oDlg FONT oFont2
ATail( oDlg:aControls ):Cargo = "YEAR"
@ 1.1, 5 SAY cLongFecha COLOR CLR_HBLUE FONT oFont2
ATail( oDlg:aControls ):Cargo = "DATE"
@ 2, 3 SAY "DOM" COLOR CLR_HRED FONT oFont3
@ 2, 7 SAY "LUN" COLOR CLR_HGREEN FONT oFont3
@ 2, 11 SAY "MAR" COLOR CLR_HRED FONT oFont3
@ 2, 15.3 SAY "MIE" COLOR CLR_HRED FONT oFont3
@ 2, 19.5 SAY "JUE" COLOR CLR_HRED FONT oFont3
@ 2, 23.5 SAY "VIE" COLOR CLR_HRED FONT oFont3
@ 2, 27.8 SAY "SAB" COLOR CLR_HRED FONT oFont3
for nRow = 2 to 7
do case
case nRow=2
nLin := 42
case nRow=3
nLin := 62
case nRow=4
nLin := 82
case nRow=5
nLin := 102
case nRow=6
nLin := 122
case nRow=7
nLin := 142
endcase
for nCol = 1 to 7
do case
case nCol=1
nColu := 15
case nCol=2
nColu := 40
case nCol=3
nColu := 65
case nCol=4
nColu := 90
case nCol=5
nColu := 115
case nCol=6
nColu := 140
case nCol=7
nColu := 165
endcase
@ nLin, nColu BTNBMP ;
PROMPT Str( Day( dWork ), 2 ) SIZE 20, 20 NOBORDER FONT oFont4 ; //size 12,12
ACTION ( oDlg:Cargo := ::Cargo, oDlg:End( IDOK ) )
ATail( oDlg:aControls ):Cargo = dWork
ATail( oDlg:aControls ):nClrText = if(nCol=1,CLR_HRED, ;
If( dWork == Date(), CLR_YELLOW,;
If( dWork == dDate, CLR_HBLUE, If( Month( dWork ) == nMonth,;
if( feriados->(DbSeek(DToC(ATail( oDlg:aControls ):Cargo)),.f.), CLR_BROWN,CLR_BLACK ), CLR_CYAN ) ) ) )
// esto anda if( dtoc(ATail( oDlg:aControls ):Cargo) == '17/06/2024', CLR_BROWN,CLR_BLACK ), CLR_CYAN ) ) ) )
// if( feriados->(DbSeek(DToS(ATail( oDlg:aControls ):Cargo))), CLR_BROWN,CLR_BLACK ), CLR_CYAN ) ) ) )
if ATail( oDlg:aControls ):Cargo == dDate
ATail( oDlg:aControls ):lPressed = .t.
ATail( oDlg:aControls ):cToolTip = "Selección"
elseif ATail( oDlg:aControls ):Cargo == Date()
ATail( oDlg:aControls ):cToolTip = "Hoy"
else
ATail( oDlg:aControls ):cToolTip = DToC(ATail( oDlg:aControls ):Cargo)
endif
dWork++
next
next
oDlg:Cargo := dDate
ACTIVATE DIALOG oDlg CENTERED
dSelect := oDlg:Cargo
if oGet != NIL
oGet:VarPut( If( oDlg:nResult == IDOK, dSelect, dDate ) )
oGet:Refresh()
endif
CLOSE FERIADOS
return If( oDlg:nResult == IDOK, dSelect, ctod('//') )
//return If( oDlg:nResult == IDOK, dSelect, dDate )
//-----------------------------------------------------------------------//
static function MoveCalendar( oDlg, nMode, nVar)
local dSelect := oDlg:Cargo
local n
local nFirstButton := 0
local nLastButton := 0
local nDate := 0
local nSkip := 0
local nPDate := 0
local nPYear := 0
local nDay, nMonth, nYear
local dWork
local nDays := 0
for n := 1 TO Len( oDlg:aControls )
if oDlg:aControls[ n ]:ClassName() == "TBTNBMP"
nFirstButton := If( nFirstButton == 0, If(nSkip<2, 0, n), nFirstButton )
nLastButton := n
nSkip++
oDlg:aControls[ n ]:lPressed := .F.
endif
if ValType( oDlg:aControls[ n ]:Cargo ) == "C"
if oDlg:aControls[ n ]:Cargo == "DATE"
nPDate := n
endif
if oDlg:aControls[ n ]:Cargo == "YEAR"
nPYear := n
endif
endif
next n
nDay := Day( dSelect )
nMonth := Month( dSelect )
nYear := Year( dSelect )
do case
case nMode == 1
nMonth := nVar
case nMode == 3
nYear --
case nMode == 4
nYear ++
endcase
dSelect := TToD( padl( nDay, 2) + "/" + ;
padl( nMonth, 2 ) + "/" + ;
right(padl( nYear, 4 ), 2), "DD/MM/YY" )
cLongDate := dDateToString( dSelect )
clongfecha := verfecha( dselect )
oDlg:aControls[ nPDate ]:cMsg := cLongDate
oDlg:aControls[ nPYear ]:VarPut( nYear)
dWork := TToD( "01/" + padl( nMonth, 2 ) + "/" + right(padl( nYear, 4 ), 2), "DD/MM/YY" )
while DoW( dWork ) > 1
dWork --
enddo
for n := nFirstButton TO nLastButton
oDlg:aControls[ n ]:SetText( Str( Day( dWork ), 2 ) )
oDlg:aControls[ n ]:Cargo = dWork
oDlg:aControls[ n ]:nClrText = If( dWork == Date(), CLR_HRED,;
If( dWork == dSelect, CLR_HBLUE, If( Month( dWork ) == nMonth,;
CLR_BLACK, CLR_CYAN ) ) )
oDlg:aControls[ n ]:cToolTip = DToC(dWork)
if dWork == dSelect
oDlg:aControls[ n ]:lPressed = .T.
oDlg:aControls[ n ]:cToolTip = "Selected"
endif
dWork++
next n
for n := 1 TO Len( oDlg:aControls )
oDlg:aControls[ n ]:Refresh()
next n
oDlg:Cargo := dSelect
return nil
//-----------------------------------------------------------------------//
static function dDateToString( dDate )
return cDow( dDate) + " " + cMonth( dDate ) + " " + Str( Day ( dDate), 2) +;
", " + Str( Year( dDate), 4)
//-----------------------------------------------------------------------//
static function TToD(cDate, cFormat)
LOCAL cDay, cMonth, cYear, cLYear
LOCAL RetDate
LOCAL cClipFormat := UPPER(SET(4))
LOCAL nEPOCH := SET(5)
IF VALTYPE(cFormat) != "C"
cFormat := "MM/DD/YY"
ENDIF
IF EMPTY(cDate)
RetDate := CTOD("")
ELSE
IF ("YYYY" $ cFormat)
cLYear := PADR( VAL( SUBSTR(cDate, AT("YYYY", cFormat), 4 )), 4, "0")
cYear := PADL( VAL( RIGHT(cLYear, 2)), 2, "0")
ELSEIF ("YY" $ cFormat)
cYear := PADL( VAL( SUBSTR(cDate, AT("YY", cFormat), 2 )), 2, "0")
IF VAL("19" + cYear) > nEPOCH
cLYear := "19" + cYear
ELSE
cLYear := "20" + cYear
ENDIF
ENDIF
IF ("MM" $ cFormat)
cMonth := PADL( ALLTRIM( SUBSTR(cDate, AT("MM", cFormat), 2 )), 2, "0")
ENDIF
IF ("DD" $ cFormat)
cDay := PADL( ALLTRIM( SUBSTR(cDate, AT("DD", cFormat), 2 )), 2, "0")
ENDIF
IF ("YYYY" $ cClipFormat)
cClipFormat := LEFT(cClipFormat, AT("YYYY", cClipFormat) - 1 ) + cLYear + SUBSTR(cClipFormat, AT("YYYY", cClipFormat) + 4 )
ELSEIF ("YY" $ cClipFormat)
cClipFormat := LEFT(cClipFormat, AT("YY", cClipFormat) - 1 ) + cYear + SUBSTR(cClipFormat, AT("YY", cClipFormat) + 2 )
ENDIF
IF ("MM" $ cClipFormat)
cClipFormat := LEFT(cClipFormat, AT("MM", cClipFormat) - 1 ) + cMonth + SUBSTR(cClipFormat, AT("MM", cClipFormat) + 2 )
ENDIF
IF ("DD" $ cClipFormat)
cClipFormat := LEFT(cClipFormat, AT("DD", cClipFormat) - 1 ) + cDay + SUBSTR(cClipFormat, AT("DD", cClipFormat) + 2 )
ENDIF
RetDate := CTOD(cClipFormat)
ENDIF
return (RetDate)
//-----------------------------------------------------------------------//
static function verfecha( dDate )
return dialet( DOW(dDate)) + ", " + Str( Day ( dDate), 2)+ " de "+;
meslet( month(dDate) ) + " de " + Str( Year( dDate), 4)
*------------------------------------------------------------------------------------
*------------------------------------------------------------------------
// Funci¢n MesLet( <nMes> )
// Objeto: Obtiene el Mes en letras correspondiente a <nMes>
// Return: <cMes>
// Nota: Si <nMes> no es v lido devuelve el mes de la fecha actual
function MesLet(mes,_Minus)
local meses:={'ENERO','FEBRERO','MARZO','ABRIL','MAYO','JUNIO','JULIO','AGOSTO','SETIEMBRE','OCTUBRE','NOVIEMBRE','DICIEMBRE'}
Local Meses2:={" Enero "," Febrero "," Marzo "," Abril "," Mayo "," Junio "," Julio "," Agosto ","Setiembre"," Octubre ","Noviembre","Diciembre"}
return if(_Minus==.t., meses2[if(mes=nil,month(date()) ,mes)] , meses[if(mes=nil,month(date()) ,mes)])
*--------------------------------------------------------------------------
function DiaLet(_Dia)
local que_dia:={'Domingo','Lunes','Martes','Miércoles','Jueves' ,'Viernes','Sábado'}
return Que_Dia[if(_dia=nil,day(date()),_dia)]
*--------------------------------------------------------------------------