Page 1 of 2

Tema calendario nuevamente.

Posted: Sun Jun 09, 2024 11:26 pm
by José Camilo
Buenas noches.
Buscando un calendario mas grande a MsgDate me sugirieron usar la clase tMiCalendario, mi version de FW es 12.6 y no contiene dicha clase.
Alguien conoce alguna otra aplicacion que muestre un calendario de tamaño mayor?

Gracias

Re: Tema calendario nuevamente.

Posted: Mon Jun 10, 2024 1:21 am
by Antonio Linares

Re: Tema calendario nuevamente.

Posted: Mon Jun 10, 2024 5:58 am
by Jimmy
hi,
what about CLASS TCalendar from source\classes\tcalenda.prg
Image

Code: Select all | Expand

         oCal := TCalendar() :New( 0, 0, { | u | IF( PCOUNT() == 0, dFirst, dFirst := u ) }, { | u | IF( PCOUNT() == 0, dLast, dLast := u ) }, oWnd,,,, BFcolor, BGcolor, oFontDefault, .F.,, .F.,, .F., .T.,, { | nKey, nFlags, Self | ( oWnd:Update() ) },, { | Self | ( oCal:End(), oWnd:End() ) }, { | Self | ( aDates := oCal:GetDateRange(), MsgInfo( cText := DTOC( aDates[ 1 ] ) + " - " + DTOC( aDates[ 2 ] ) + CHR( 13 ) + CHR( 10 ) + LTRIM( STR( aDates[ 2 ] - aDates[ 1 ] ) ) + " Days" ) ) }, .T., .F., .F., .F. )

      // NEED for Color
      SetWindowTheme( oCal:hWnd, "", "" )

      oCal:SetBackGround( BGcolor )
      oCal:SetMonthBk( BGcolor )

      oCal:SetTitleBk( CLR_GRAY )

      oCal:SetTextClr( BFcolor )
      oCal:SetTitleText( BFcolor )
      oCal:SetTrailingText( CLR_GRAY )

      oCal:SetMaxSelCount( 364 + 1 )                                  // max Day Range select

      oWnd:oClient := oCal

      oWnd:bKeyDown := { | nKey, nFlag | IF( nKey = VK_ESCAPE, ( oCal:End(), oWnd:End() ), nil ) }
      oCal:bKeyDown := { | nKey, nFlag | IF( nKey = VK_ESCAPE, ( oCal:End(), oWnd:End() ), nil ) }
      oCal:bAction := { | nKey, nFlag | ( oCal:End(), oWnd:End() ) }
 

Re: Tema calendario nuevamente.

Posted: Mon Jun 10, 2024 7:01 am
by Otto
Jose, 'mas grande' do you mean like Jimmy suggests or the display larger?
Best regards,
Otto

Image

Re: Tema calendario nuevamente.

Posted: Mon Jun 10, 2024 12:10 pm
by karinha

Re: Tema calendario nuevamente.

Posted: Mon Jun 10, 2024 1:59 pm
by Antonio Linares
Un nuevo calendario implementado por nuestro querido Rao usando XBrowse. Una maravilla! :-)

xbcalend.prg

Code: Select all | Expand

#include "fivewin.ch"

REQUEST HB_LANG_ESWIN
REQUEST HB_LANG_FR
REQUEST HB_LANG_PT
REQUEST HB_LANG_DEWIN
REQUEST HB_LANG_IT

static aCal

//----------------------------------------------------------------------------//

function Main()

   local aWeeks   := Array( 7 )

   aCal  := Array( 7, 6 )

   HB_LANGSELECT( "EN" )

//   AEval( aWeeks, { |u,i| aWeeks[ i ] := Upper( Left( nTocDow( i ), 3 ) ) } )

//   XBROWSER aWeeks

   ShowCalendar()

return nil

function ShowCalendar()

   local dMth, nMth, nYear
   local aMonths  := MonthNames()
   local nLang := 1
   local oDlg, oBrw, oCbxLang, oCbxMth, oGetYr
   local oFont, oBold

   dMth     := BOM( Date() - 30 )
   nMth     := MONTH( dMth )
   nYear    := YEAR( dMth )
   FillDates( nMth, nYear )

   DEFINE FONT oFont NAME "Segoe UI" SIZE 0,-16
   DEFINE FONT oBold NAME "IMPACT" SIZE 0,-40

   DEFINE DIALOG oDlg SIZE 600,550 PIXEL TRUEPIXEL RESIZABLE FONT oFont ;
      TITLE "CALENDAR"

   @ 40, 20 COMBOBOX oCbxLang VAR nLang ITEMS { "ENGLISH", "SPANISH", "FRENCH", "PORTUGESE", "GERMAN", "ITALIAN" } ;
      SIZE 120,400 PIXEL OF oDlg  ON CHANGE ( ;
         HB_LANGSELECT( { "EN", "ES", "FR", "PT", "DE", "IT" }[ nLang ] ), ;
         oBrw:Refresh(), oCbxMth:SetItems( aMonths := MonthNames() ) )

   @ 40,200 COMBOBOX oCbxMth VAR nMth ITEMS aMonths ;
      SIZE 100,400 PIXEL OF oDlg ON CHANGE ( ;
      FillDates( nMth, nYear ), oBrw:Refresh() )

   @ 40,400 GET oGetYr VAR nYear SIZE 80,30 PIXEL OF oDlg RIGHT SPINNER ;
      ON UP ( FillDates( nMth, ++nYear ), oBrw:Refresh(), oGetYr:Refresh() ) ;
      ON DOWN ( FillDates( nMth, --nYear ), oBrw:Refresh(), oGetYr:Refresh() ) ;
      VALID ( FillDates( nMth, nYear ), oBrw:Refresh(), .t. )


   @ 80, 0 XBROWSE oBrw SIZE 0,0 PIXEL OF oDlg ;
      DATASOURCE aCal ;
      COLUMNS { || Upper( Left( NtoCDow( oBrw:nArrayAt ), 3 ) ) }, 1, 2, 3, 4, 5 ;
      HEADERS "WEEK", "1", "2", "3", "4", "5" ;
      LINES NOBORDER

   WITH OBJECT oBrw
      :nRowHeight    := 60
      :nWidths       := 90
      :nStretchCol   := 1
      :lDisplayZeros := .f.
      :lColDividerComplete := .f.
      :nDataStrAligns   := AL_CENTER
      :oDataFonts    := oBold
      //
      :CreateFromCode()
   END

   ACTIVATE DIALOG oDlg CENTERED ON INIT ( oBrw:SetFocus() )

return nil

static function FillDates( nMth, nYear )

   local dDate := STOD( STR( nYear, 4 ) + STRZERO( nMth, 2 ) + "01" )
   local nDays := LastDayOM( dDate )
   local nDow  := DOW( dDate )
   local nRow, nCol, nDay := 1

   // this may be revised

   if nDow > 1
      AEval( aCal, { |a| a[ 1 ] := 0 }, 1, nDow )
   endif
   AEval( aCal, { |a| a[ 1 ] := nDay++ }, nDow )
   for nCol := 2 to 4
      AEval( aCal, { |a| a[ nCol ] := nDay++ } )
   next
   AEval( aCal, { |a| a[ 5 ] := If( nDay <= nDays, nDay++, 0 ) } )

   if nDay <= nDays
      AEval( aCal, { |a| a[ 1 ] := nDay++ }, 1, nDays - nDay + 1 )
   endif

return nil

static function MonthNames()

   local aRet  := Array( 12 )

   AEval( aRet, { |u,i| aRet[ i ] := UPPER( NTOCMONTH( i ) ) } )

return aRet
Image

Re: Tema calendario nuevamente.

Posted: Mon Jun 10, 2024 2:04 pm
by José Camilo
Muchas Gracias a:
Mr. Rao, Antonio, Joao, Nano Espinoza, Jimmy y Otto por el tiempo dedicado.

Muchas Gracias

Re: Tema calendario nuevamente.

Posted: Wed Jun 12, 2024 1:08 am
by jbrita
Buenas noches...
Otto podrias compartir ese calendario
saludos

Re: Tema calendario nuevamente.

Posted: Wed Jun 12, 2024 11:45 am
by Euclides
Wonderful!... But... Here in Brazil (and other places in the world) the name of the week days are at the top.
And the week numbers are at left. Could show the number of the week in the year.
Just my 2 cents.
Regards, Euclides.

Re: Tema calendario nuevamente.

Posted: Wed Jun 12, 2024 1:35 pm
by karinha
https://imgur.com/NOISSwf

Image

Regards, saludos.

Re: Tema calendario nuevamente.

Posted: Wed Jun 12, 2024 1:36 pm
by karinha
Master RAO, can you help with these questions?

Maestro RAO, ¿puede ayudarnos con estas preguntas?

Code: Select all | Expand

// C:\FWH\SAMPLES\XBCALEND.PRG  By mister Rao.

#include "fivewin.ch"

REQUEST HB_LANG_ESWIN
REQUEST HB_LANG_FR
REQUEST HB_LANG_PT
REQUEST HB_LANG_DEWIN
REQUEST HB_LANG_IT

REQUEST HB_CODEPAGE_PT850

STATIC aCal

FUNCTION Main()

   LOCAL aWeeks := Array( 7 )

   aCal := Array( 7, 6 )

   // hb_langSelect( "EN" )

   HB_LANGSELECT( 'PT' )     // Default language is now Portuguese

   /*
   Mr Rao, if you use this command, it causes an error on the day:
   Sábado (SAB) is returned S B. In Portuguese there is no S B but SÁB (Sabádo)
   Saturday

   HB_SETCODEPAGE( "PT850" )
   */

   // AEval( aWeeks, { |u,i| aWeeks[ i ] := Upper( Left( nTocDow( i ), 3 ) ) } )

   // XBROWSER aWeeks

   ShowCalendar()

RETURN NIL

FUNCTION ShowCalendar()

   LOCAL dMth, nMth, nYear, oSaida
   LOCAL aMonths  := MonthNames()
   LOCAL nLang // := 1     // 12/06/2024 - Joao.
   LOCAL oDlg, oBrw, oCbxLang, oCbxMth, oGetYr
   LOCAL oFont, oBold, cItens, cHeader, cTitle

   // dMth  := BOM( Date() - 30 ) // 12/06/2024 - Joao.
   // It must show the current month and not the previous month.
   dMth  := BOM( Date() )
   nMth  := Month( dMth )
   nYear := Year( dMth )

   FillDates( nMth, nYear )

   // 12/06/2024 - Joao.
   DEFAULT nLang := FWSetLanguage()
   // nLang := 4 // Portuguese
   FWSetLanguage( nLang )

   SkinButtons()

   // 12/06/2024 - Joao.
   IF( nLang ) = 4
      cItens  := { "INGLÊS", "ESPANHOL", "FRANCÊS", "PORTUGUÊS", "ALEMÃO", "ITALIANO" }
      cHeader := { "SEMANA", "1", "2", "3", "4", "5" }
      cTitle  := "CALENDÁRIO"
   ELSE
      cItens  := { "ENGLISH", "SPANISH", "FRENCH", "PORTUGESE", "GERMAN", "ITALIAN" }
      cHeader := { "WEEK", "1", "2", "3", "4", "5" }
      cTitle  := "CALENDAR"
   ENDIF

   DEFINE FONT oFont NAME "Segoe UI" SIZE 0, - 16
   DEFINE FONT oBold NAME "IMPACT"   SIZE 0, - 40

   DEFINE DIALOG oDlg SIZE 600, 550 PIXEL TRUEPIXEL RESIZABLE FONT oFont ;
      TITLE cTitle 

   // Here it returns wrong. After changing the language
   @ 40, 20 COMBOBOX oCbxLang VAR nLang ITEMS cItens                    ;
      SIZE 120, 400 PIXEL OF oDlg  ON CHANGE ( ;
      hb_langSelect( { "EN", "ES", "FR", "PT", "DE", "IT" }[ nLang ] ), ;
      oBrw:Refresh(), oCbxMth:SetItems( aMonths := MonthNames() ) )

   @ 40, 200 COMBOBOX oCbxMth VAR nMth ITEMS aMonths ;
      SIZE 100, 400 PIXEL OF oDlg ON CHANGE ( ;
      FillDates( nMth, nYear ), oBrw:Refresh() )

   @ 40, 400 GET oGetYr VAR nYear SIZE 80, 30 PIXEL OF oDlg RIGHT SPINNER ;
      ON UP ( FillDates( nMth, ++nYear ), oBrw:Refresh(), oGetYr:Refresh() ) ;
      ON DOWN ( FillDates( nMth, --nYear ), oBrw:Refresh(), oGetYr:Refresh() ) ;
      VALID ( FillDates( nMth, nYear ), oBrw:Refresh(), .T. )

   @ 80, 0 XBROWSE oBrw SIZE 0, 0 PIXEL OF oDlg ;
      DATASOURCE aCal ;
      COLUMNS {|| Upper( Left( NtoCDow( oBrw:nArrayAt ), 3 ) ) }, 1, 2, 3, 4, 5 ;
      HEADERS cHeader ; // "WEEK", "1", "2", "3", "4", "5" ;
      LINES NOBORDER

   WITH OBJECT oBrw
      :nRowHeight    := 60
      :nWidths       := 90
      :nStretchCol   := 1
      :lDisplayZeros := .F.
      :lColDividerComplete := .F.
      :nDataStrAligns := AL_CENTER
      :oDataFonts    := oBold
      //
      :CreateFromCode()
   END

   @ 001, 500 BUTTONBMP oSaida PROMPT( "&Saida" )                     ;
      BITMAP "..\bitmaps\16x16\Exit.bmp" TEXTRIGHT SIZE 086, 34 PIXEL ;
      FONT oFont OF oDlg ACTION( oDlg:End() ) CANCEL

   ACTIVATE DIALOG oDlg CENTERED ON INIT ( oBrw:SetFocus() )

   oFont:End()
   oBold:End()

RETURN NIL

STATIC FUNCTION FillDates( nMth, nYear )

   LOCAL dDate := SToD( Str( nYear, 4 ) + StrZero( nMth, 2 ) + "01" )
   LOCAL nDays := LastDayOM( dDate )
   LOCAL nDow  := DoW( dDate )
   LOCAL nRow, nCol, nDay := 1

   // this may be revised

   IF nDow > 1
      AEval( aCal, {| a | a[ 1 ] := 0 }, 1, nDow )
   ENDIF

   AEval( aCal, {| a | a[ 1 ] := nDay++ }, nDow )

   FOR nCol := 2 TO 4
      AEval( aCal, {| a | a[ nCol ] := nDay++ } )
   NEXT

   AEval( aCal, {| a | a[ 5 ] := If( nDay <= nDays, nDay++, 0 ) } )

   IF nDay <= nDays
      AEval( aCal, {| a | a[ 1 ] := nDay++ }, 1, nDays - nDay + 1 )
   ENDIF

RETURN NIL

STATIC FUNCTION MonthNames()

   LOCAL aRet  := Array( 12 )

   AEval( aRet, {| u, i | aRet[ i ] := Upper( NTOCMONTH( i ) ) } )

RETURN aRet
 
Regards, saludos.

Re: Tema calendario nuevamente.

Posted: Wed Jun 12, 2024 1:40 pm
by karinha
Señor Rao, la visualización del calendario en portugués es incorrecta.

Mister Rao, calendar display for Portuguese is incorrect.

https://imgur.com/FvsUkOv

Image

Gracias, tks.

Regards, saludos.

Re: Tema calendario nuevamente.

Posted: Wed Jun 12, 2024 7:34 pm
by sysctrl2
Se puede seleccionar la fecha ?

Code: Select all | Expand

dFecha := ShowCalendar()
? dFecha
 

Re: Tema calendario nuevamente.

Posted: Tue Jun 25, 2024 9:16 pm
by carlos vargas
Karina, muy bonito calendario, su forma y colores.

Re: Tema calendario nuevamente.

Posted: Wed Jun 26, 2024 1:36 pm
by karinha
carlos vargas wrote:Karina, muy bonito calendario, su forma y colores.
Buén dia. Download aqui master:

https://mega.nz/file/cIcwEBaZ#E3PhxjP_G ... WLymsU4fJ8

Regards, saludos.