FUNCTION Bitacora()
#include "Fivewin.ch"
#include "RichEdit.ch"
#define FW_BOLD 700
LOCAL oFont, oFont2, oGet, hDLL := LoadLibrary( "Riched20.dll" )
PRIVATE oDlg, oPrueba1, cDatos:=cResultados:="", dFecha:=CToD(" / / "), m_FILE:=SPACE(8), oFont3
PRIVATE oRtf, oBtn[7], lBold, lItalic, lUnderline
SET _3DLOOK ON
* Lectura de datos y resultados del día de hoy
IF FILE(RUTRES+"BITACORA.DBF")
USE &RUTRES.BITACORA
INDEX ON DIA TO &RUTRES.BITACORA
IF DBSeek( DATE() )
cResultados=RESULTADOS
cDatos=DATOS
ELSE
cResultados=""
cDatos=""
ENDIF
ELSE
MsgInfo("No existe el archivo de bitácora"+CRLF+"Volveremos al menú principal", "Atención")
FreeLibrary(hDLL)
DBCloseArea()
RETU .T.
ENDIF
DEFINE FONT oFont NAME "Arial" SIZE 0,-14
DEFINE FONT oFont2 NAME "Ms Sans Serif" SIZE 0,-11
DEFINE FONT oFont3 NAME "Ms Sans Serif" SIZE 0,-12
* Define dialogo
DEFINE DIALOG oDlg OF oVent FROM 10,10 TO 417,762 PIXEL TITLE "Bitácora de SicefWin"
oDlg:nStyle := nOr( oDlg:nStyle, 4 )
* Control MiCalendario
oPrueba1:= TMiCalendario(): New ( 5, 5,120,120, oDlg, oFont)
oPrueba1:FijaClrDomingo( {rgb( 255, 255, 255),; //Color borde superior // Para pintar los domingos de otro color...
rgb( 220, 220, 220),; //Color relleno
rgb( 128, 128, 128),; //Color borde inferior
rgb( 0, 0, 0) } ) //color texto....
oPrueba1:bAction := { |dFechaControl| (LeeResultados(dFechaControl), oRtf:LoadAsRTF(cDatos), ;
oRtf:SetText(cDatos), oDlg:Update() ) }
oPrueba1:bCambioMes := { || FijarFestivos( oPrueba1 ) } // Al cambiar de mes... se asignan nuevos festivos...
* Say y Gets con los resultados en el día seleccionado
@ 4,130 SAY "Resultados en el día seleccionado:" PIXEL SIZE 100,10 OF oDlg COLOR CLR_RED,GetSysColor(15)
@ 11,130 GET oGet VAR cResultados MEMO OF oDlg READONLY PIXEL SIZE 240,55 UPDATE FONT oFont2 ;
COLOR RGB(0,0,0), RGB(231,235,222)
oGet:cToolTip := "Resultados en el día seleccionado"
@ 68,130 SAY "HECHOS relevantes del día seleccionado:" PIXEL SIZE 120,10 OF oDlg COLOR CLR_RED,GetSysColor(15)
* Editor de texto RichEdit para detalles o cronicas
@ 89,130 RICHEDIT oRtf VAR cDatos OF oDlg FILE cDatos PIXEL SIZE 240,99 FONT oFont3
*ON CHANGE IF( oRtf:IsModify(), oBtn[1]:Enable(), oBtn[1]:Disable() )
*ON CHANGE ( RefreshButtonBar(oDlg), IF( oRtf:IsModify(), oBtn[1]:Enable(), oBtn[1]:Disable() ) )
oRtf:cToolTip:="Vista de los hechos relevantes del día seleccionado"
oRtf:nClrText:=CLR_GRAY
oRtf:SetFontName("Ms Sans Serif")
oRtf:SetFontSize(11)
* Botones de control
@ 188,310 BUTTONBMP oBtn[1] PROMPT " &Grabar Datos" BITMAP "SAVE" TEXTRIGHT OF oDlg PIXEL SIZE 60,12 FONT oFont ;
ACTION IF( oRTF:IsModify(), (cDatos:=oRTF:SaveAsRTF(), GrabaBtcr(oPrueba1:dFechaControl)), ;
MsgInfo("No ha habido cambios en el texto","Atención") )
oBtn[1]:cToolTip="Graba datos del campo Hechos relevantes del día"
oBtn[1]:Disable()
@ 147,5 BUTTON oBtn[2] PROMPT "Seleccionar &día" OF oDlg PIXEL SIZE 54,12 FONT oFont ;
ACTION IF( oRTF:IsModify(), IF( MsgYesNo("¿Pierde los cambios que realizó en Hechos?","Atención"), ;
(IF( MsgGet("Seleccionar día","Ingresar día a consultar:",@dFecha,), oPrueba1:IrFecha( dFecha ), ), ;
LeeResultados(dFecha), oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()), ), ;
(IF( MsgGet("Seleccionar día","Ingresar día a consultar:",@dFecha,), oPrueba1:IrFecha( dFecha ), ), ;
LeeResultados(dFecha), oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()) )
oBtn[2]:cToolTip="Seleccionar un día específico"
@ 147,70 BUTTON oBtn[3] PROMPT "&Ir al día de hoy" OF oDlg PIXEL SIZE 54,12 FONT oFont ;
ACTION IF( oRTF:IsModify(), IF( MsgYesNo("¿Pierde los cambios que realizó en Hechos?","Atención"), ;
(oPrueba1:IrFecha(Date()), LeeResultados(Date()), oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()), ), ;
(oPrueba1:IrFecha(Date()), LeeResultados(Date()), oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()))
oBtn[3]:cToolTip="Ir al día de hoy"
@ 166,5 BUTTON oBtn[4] PROMPT "Día &anterior" OF oDlg PIXEL SIZE 54,12 FONT oFont ;
ACTION IF( oRTF:IsModify(), IF( MsgYesNo("¿Pierde los cambios que realizó en Hechos?","Atención"), ;
(oPrueba1:IrFecha(oPrueba1:dFechaControl-1), LeeResultados(oPrueba1:dFechaControl), ;
oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()) , ), ;
(oPrueba1:IrFecha(oPrueba1:dFechaControl-1), LeeResultados(oPrueba1:dFechaControl), ;
oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()) )
oBtn[4]:cToolTip="Pasa al día anterior"
@ 166,70 BUTTON oBtn[5] PROMPT "Día si&guiente" OF oDlg PIXEL SIZE 54,12 FONT oFont ;
ACTION IF( oRTF:IsModify(), IF( MsgYesNo("¿Pierde los cambios que realizó en Hechos?","Atención"), ;
(oPrueba1:IrFecha(oPrueba1:dFechaControl+1), LeeResultados(oPrueba1:dFechaControl), ;
oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()) , ), ;
(oPrueba1:IrFecha(oPrueba1:dFechaControl+1), LeeResultados(oPrueba1:dFechaControl), ;
oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()) )
oBtn[5]:cToolTip="Pasa al día siguiente"
@ 185,5 BUTTON oBtn[6] PROMPT "&Regrabar resultados" OF oDlg PIXEL SIZE 68,12 FONT oFont ;
ACTION MsgMeter({|oMet,oText,oDlg,lEnd| RegrabaRes(oMet,oText,oDlg,@lEnd)},"Procesando...", "Por favor, espere")
oBtn[6]:cToolTip="Regraba todos los resultados históricos de todos los torneos"
@ 185,79 BUTTONBMP oBtn[7] PROMPT " &Salir" BITMAP "CANCELAR" TEXTRIGHT OF oDlg PIXEL SIZE 45,12 FONT oFont ;
ACTION IF( oRTF:IsModify(), IF( MsgYesNo("¿Pierde los cambios que realizó en Hechos?","Atención"), ;
oDlg:End(2), (cDatos:=oRTF:SaveAsRTF(), GrabaBtcr(oPrueba1:dFechaControl), oDlg:End(1)) ), oDlg:End(2) )
oBtn[7]:cToolTip="Salir"
oDlg:bInit := { || RefreshBar() }
*oDlg:bValid := { || RefreshBar() }
oDlg:oClient = oRtf
*oDlg:lHelpIcon:= .F. // comentado al probar con Window
ACTIVATE DIALOG oDlg CENTERED ON INIT (oDlg:SetIcon(oApp:cIcono), Centra(oDlg), CargaBarra(oDlg), ;
oRtf:LoadAsRTF(cDatos), oRtf:SetText(cDatos), ;
oRtf:bChange:={ || ( RefreshButtonBar(oDlg), IF( oRtf:IsModify(), oBtn[1]:Enable(), oBtn[1]:Disable() ) ) }, ;
Eval( oRtf:bChange ), oRtf:SetFocus(), .F.)
*oRtf:LoadAsRTF(cDatos), oRtf:SetText(cDatos), oRtf:bChange:={ || RefreshButtonBar(oDlg) }, Eval( oRtf:bChange ), ;
// el valor .F. al final en ON INIT es para q cambie el focus inicial grabado en los recursos
// la Button Bar en los dialog se carga a través de ON INIT
IF oDlg:nResult=1
MsgInfo("Datos se grabaron con éxito","Atención")
ENDIF
RELEASE FONT oFont
RELEASE FONT oFont2
RELEASE FONT oFont3
FreeLibrary(hDLL)
DBCloseArea()
Return nil
*FDF Bitacora
STATIC FUNCTION RefreshBar()
LOCAL oBar := oDlg:oBar:aControls
IF Len( oDlg:oWndClient:aWnd ) == 1
AEval( oBar, { |x, y| If( y == 1, x:Enable(), x:Disable() ) }, 1, 0 ) // no hace nada, porq la barra de botones está reducida, sin los primeros botones Save, ...
AEval( oBar, { |x| x:Refresh() }, 1, 0 )
ENDIF
RETURN .t.
STATIC FUNCTION RefreshButtonBar( oDlg )
LOCAL oBar := oDlg:oBar:aControls
LOCAL aChar := REGetCharFormat( oRtf:hWnd )
LOCAL nAlign := REGetParaFormat( oRtf:hWnd )
oBar[ 6]:lPressed := lBold := aChar[5] == FW_BOLD
oBar[ 7]:lPressed := lItalic := aChar[6]
oBar[ 8]:lPressed := lUnderline := aChar[7]
oBar[ 9]:lPressed := nAlign == PFA_LEFT
oBar[10]:lPressed := nAlign == PFA_CENTER
oBar[11]:lPressed := nAlign == PFA_RIGHT
oBar[12]:lPressed := nAlign == PFA_JUSTIFY
oBar[13]:VarPut( aChar[14] ) // Font
oBar[14]:VarPut( aChar[ 1] ) // Tamaño del font, es 9 por omisión
AEval( oBar, { |x| IF( x:lWhen(), x:Enable(), x:Disable() ), x:Refresh() }, 1, 14 )
RETU .T.
*FDF RefreshButtonBar
STATIC FUNCTION CargaBarra(oDlg)
LOCAL oBar, oCursor, hDC, aFonts, oClp, oBold, oItalic, oUnderline, oItem, cFont, oSize, nSize:=10
hDC := GetDC( oDlg:hWnd )
aFonts := ASort( GetFontNames( hDC ) )
ReleaseDC( oDlg:hWnd, hDC )
DEFINE CURSOR oCursor HAND
DEFINE CLIPBOARD oClp OF oDlg FORMAT TEXT
* Controles de la ButtonBar
@ 150,260 BUTTONBAR oBar OF oDlg 3DLOOK SIZE 480,27 BUTTONSIZE 24,24 TOP
// 1
DEFINE BUTTON RESOURCE "Cut" OF oBar MESSAGE "Cortar" NOBORDER ;
WHEN ( ! Empty( oRtf:GetSel() ) .and. ! oRtf:lReadOnly ) ACTION ( oRtf:Cut(), oRtf:SetFocus() ) ;
TOOLTIP "Cierra archivo abierto" TRANSPARENT CENTER
// 2
DEFINE BUTTON RESOURCE "Copy" OF oBar MESSAGE "Copiar" NOBORDER ;
WHEN ( ! Empty( oRtf:GetSel() ) ) ACTION ( oRtf:Copy(), oRtf:SetFocus() ) ;
TOOLTIP "Copiar" TRANSPARENT CENTER
// 3
DEFINE BUTTON RESOURCE "Paste" OF oBar MESSAGE "Pegar" NOBORDER ;
WHEN ( ! Empty( oClp:GetText() ) .and. ! oRtf:lReadOnly ) ACTION ( oRtf:Paste(), oRtf:SetFocus() ) ;
TOOLTIP "Pegar" TRANSPARENT CENTER
// 4
DEFINE BUTTON RESOURCE "Undo" OF oBar MESSAGE "Deshacer" NOBORDER ;
WHEN ( oRtf:SendMsg( EM_CANUNDO ) != 0 ) ACTION ( oRtf:Undo(), oRtf:SetFocus() ) ;
TOOLTIP "Deshacer" TRANSPARENT CENTER
// 5
DEFINE BUTTON RESOURCE "Redo" OF oBar MESSAGE "Rehacer" NOBORDER ;
WHEN ( oRtf:SendMsg( EM_CANREDO ) != 0 ) ACTION ( oRtf:Redo(), oRtf:SetFocus() ) ;
TOOLTIP "Rehacer" TRANSPARENT CENTER
// 6
DEFINE BUTTON oBold RESOURCE "Bold" OF oBar MESSAGE "Negrita" NOBORDER ;
ACTION ( lBold := !lBold, oBold:lPressed := lBold, oBold:Refresh(), ;
oRtf:SetBold( lBold ), oRtf:SetFocus() ) ;
TOOLTIP "Negrita" TRANSPARENT CENTER
// 7
DEFINE BUTTON oItalic RESOURCE "Italic" OF oBar MESSAGE "Italica" NOBORDER ;
ACTION ( lItalic := !lItalic, oItalic:lPressed := lItalic, oItalic:Refresh(), ;
oRtf:SetItalic( lItalic ), oRtf:SetFocus() ) ;
TOOLTIP "Italica" TRANSPARENT CENTER
// 8
DEFINE BUTTON oUnderline RESOURCE "Underline" OF oBar MESSAGE "Subrayado" NOBORDER ;
ACTION ( lUnderline := !lUnderline, oUnderline:lPressed := lUnderline, oUnderline:Refresh(), ;
oRtf:SetUnderline( lUnderline ), oRtf:SetFocus() ) ;
TOOLTIP "Subrayado" TRANSPARENT CENTER
// 9
DEFINE BUTTON RESOURCE "Left" OF oBar MESSAGE "Alinea a la izquierda" NOBORDER ;
ACTION ( oRtf:SetAlign( PFA_LEFT ), oRtf:SetFocus() ) ;
TOOLTIP "Alinea a la izquierda" TRANSPARENT CENTER
// 10
DEFINE BUTTON RESOURCE "Center" OF oBar MESSAGE "Alinea al centro" NOBORDER ;
ACTION ( oRtf:SetAlign( PFA_CENTER ), oRtf:SetFocus() ) ;
TOOLTIP "Alinea al centro" TRANSPARENT CENTER
// 11
DEFINE BUTTON RESOURCE "Right" OF oBar MESSAGE "Alinea a la derecha" NOBORDER ;
ACTION ( oRtf:SetAlign( PFA_RIGHT ), oRtf:SetFocus() ) ;
TOOLTIP "Alinea a la derecha" TRANSPARENT CENTER
// 12
DEFINE BUTTON RESOURCE "Justify" OF oBar MESSAGE "Justifica a ambos lados" NOBORDER ;
ACTION ( oRtf:SetAlign( PFA_JUSTIFY ), oRtf:SetFocus() ) ;
TOOLTIP "Justifica a ambos lados" TRANSPARENT CENTER
// 13
@ 153,561 COMBOBOX oItem VAR cFont ITEMS aFonts OF oDlg:oBar PIXEL SIZE 133,120 FONT oFont3 ;
ON CHANGE ( oRtf:SetFontName( oItem:VarGet() ), oRtf:SetFocus() )
oItem:cToolTip := "Nombre de fuente"
// 14
@ 153,695 GET oSize VAR nSize OF oDlg:oBar FONT oFont3 PIXEL SIZE 21,21 PICTURE "99" SPINNER MIN 6 MAX 99 RIGHT ;
ON CHANGE ( oRtf:SetFontSize( oSize:VarGet() ), oRtf:SetFocus() )
oSize:Set3DLook()
oSize:cToolTip := "Tamaño de fuente"
AEval( oBar:aControls, { |x| x:nLeft += 226, x:nRight += 226 }, 14 )
oBar:bLClicked := { || nil }
oBar:bRClicked := { || nil }
AEval( oBar:aControls, { |x| x:oCursor := oCursor } )
* Solo para comprobar cuantos elementos tienen la barra
? "Elementos de la barra: "+Str( Len( oBar:aControls ), 3 )
RETU .T.
*FDF CargaBarra