Page 1 of 2

DBLCLICK en TCALeNDAR no funciona

PostPosted: Mon Dec 12, 2022 9:54 am
by José Luis Sánchez
Hola a todos,
en las últimas versiones de FWH el dobleclick sobre un calendario desplegado en un formulario no funciona. En el ejemplo TESTCAL o TESTCALR al hacer dobleclick sobre los calendarios de los 3 meses desplegados sobre el formulario no muestra el msginfo() con la fecha seleccionada.
Saludos,
José Luis

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Mon Dec 12, 2022 10:06 am
by Antonio Linares
Buenos dias José Luis,

Sabes con que versión de FWH te funciona correctamente ?

Esa clase no se ha modificado desde el 30 de diciembre del 2020

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Mon Dec 12, 2022 10:08 am
by José Luis Sánchez
Hola Antonio,
con la 1905 funcionaba correctamente, pero con la 2210 no funciona. He probado a compilar la clase de 1905 con un ejecutable de la 2210 pero no funciona.

Saludos,

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Mon Dec 12, 2022 10:55 am
by Ariel
Jose luis,

Prueba de comentar en el prg :

// METHOD HandleEvent() VIRTUAL

Saludos.

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Mon Dec 12, 2022 11:21 am
by Antonio Linares
José Luis,

Le he enviado un mensaje a Rao, vamos a esperar sus comentarios

He probado con varias versiones y no funciona y el fué el último en modificar la clase, a ver que nos dice :-)

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Mon Dec 12, 2022 3:47 pm
by José Luis Sánchez
Muchas gracias Antonio.

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Tue Dec 13, 2022 8:05 pm
by cnavarro
Jose Luis, he estado haciendo pruebas y he conseguido que funcione haciendo los siguientes cambios en la clase
Code: Select all  Expand view


   METHOD HandleEvent() //VIRTUAL

.../...

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

METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TCalendar

   Do Case

      case nMsg == WM_LBUTTONDOWN
           return ::LButtonDown( nHiWord( nLParam ), nLoWord( nLParam ), nWParam )

      case nMsg == WM_LBUTTONUP
           return ::LButtonUp( nHiWord( nLParam ), nLoWord( nLParam ), nWParam )

   EndCase

return ::Super:HandleEvent( nMsg, nWParam, nLParam )

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

// En los Methods LBUTTONDOWN y LBUTTONUP, comentar la llamada a la function IsOverDay, que siempre devuelve falso y hay que ver por qué
// Así que, de momento, prueba asi

// LButtonUp

      IF ValType( ::nRowDbl ) == "N" .and. ; //IsOverDay( ::hWnd, nRow, nCol ) .AND. ;
            Abs( ::nRowDbl - nRow  ) <= HEIGHTDBLCLICK .AND. Abs( ::nColDbl - nCol ) <= WIDTHDBLCLICK

// LButtonDown

      IF ! ::lDblClick //.and. IsOverDay( ::hWnd, nRow, nCol )

 


Prueba y me dices

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Wed Dec 14, 2022 6:53 am
by José Luis Sánchez
Gracias Cristóbal, lo pruebo esta tarde y te comento.
Saludos,

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Wed Dec 14, 2022 3:53 pm
by José Luis Sánchez
Cristóbal,
lo acabo de probar con tus modificaciones, cuando hago dobleclick sobre un calendario se ejecuta este código
Code: Select all  Expand view
     IF ! ::lDblClick //.and. IsOverDay( ::hWnd, nRow, nCol )
         ::nRowDbl   = nRow
         ::nColDbl   = nCol
      ENDIF

y se ilumina el dia pulsado correctamente, pero lo que no hace es cerrar el calendario y devolver la fecha en oCalendar:dDate como hacía hasta ahora.
En mi código tengo:
Code: Select all  Expand view
  REDEFINE CALENDAR oCalendar VAR dFecha ;
      ID 11 OF oDlg DBLCLICK { || ( lOk := .t., oDlg:End()) }

y el comportamiento hasta ahora era que al hacer dobleclick se cerraba el calendario por la acción del DBLCLICK.
Saludos,
José Luis

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Wed Dec 14, 2022 4:45 pm
by Antonio Linares
José Luis,

Estoy probándolo, modificando samples\testcal.prg de esta forma:
Code: Select all  Expand view
 @ 001, 205 CALENDAR oCal VAR dDate1 OF oWnd PIXEL;
              DBLCLICK ( MsgInfo( oCal:GetDate() ), MsgInfo( "primero" ), oWnd:End() ) ;
              ON CHANGE oDtp2:cText := oCal:GetDate() SIZE 200, 170;
              ACTION( MsgInfo( "ok" ) );
              WEEKNUMBER

Code: Select all  Expand view
@ 250, 001 CALENDAR oCal2 VAR dDate3, dDate4 OF oWnd PIXEL MULTISELECT DAYSTATE;
              DBLCLICK ( MsgInfo( oCal2:GetDate() ), MsgInfo( "segundo" ), oWnd:End() )  SIZE 550, 170 COLOR CLR_BLACK, CLR_HRED
 

Y lo curioso es que la acción del segundo calendario se ejecuta tanto desde el primero como desde el segundo y si se cierra la ventana

Lo que no entiendo es porque el codeblock del segundo calendar es usado desde el primer calendar tambien. Estoy revisándolo...

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Fri Dec 16, 2022 7:07 am
by José Luis Sánchez
Alguna novedad al respecto de TCalendar ? Creo que el problema que he planteado es algo a corregir, pues estoy seguro que afecta a muchos programas.

Saludos,

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Fri Dec 16, 2022 8:51 am
by Antonio Linares
Buenos dias Jose Luis,

Puedes proporcionarnos un pequeño ejemplo autocontenido de lo que necesitas hacer ?

Aqui funciona bien con las correcciones de Cristobal a excepción de ese extraño efecto que hemos detectado cuando se usa más de un calendar en el mismo diálogo

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Fri Dec 16, 2022 5:10 pm
by José Luis Sánchez
Hola Antonio:
el código es este:

Code: Select all  Expand view
#include "FiveWin.ch"
#include "calendar.ch"

function main()
   local oDlg, oGet, oBtn
   local dFecha := date()

   DEFINE DIALOG oDlg RESOURCE "SelecFecha" TITLE "Selección de fechas"

   REDEFINE GET oGet VAR dFecha ID 101 OF oDlg UPDATE

   REDEFINE BUTTON oBtn ID 102 OF oDlg ;
      ACTION SelecFecha( @dFecha, oGet )

   ACTIVATE DIALOG oDlg CENTERED

return NIL

Function SelecFecha(dFechaPres, oGet)
   local oDlg, oButton1, oButton2, oSayFecha, oCalendar
   local lOk := .f.
   local dFecha
   local aPoint := AdjustWnd(oGet, 97*2, 88*2)

   IF Empty(dFechaPres)
      dFecha := Date()
   ELSE
      dFecha := dFechaPres
   ENDIF

   DEFINE DIALOG oDlg RESOURCE 'Ut_Calendar'       ;
      TITLE "Selección de fecha"                   ;
      COLOR GetSysColor(18), GetSysColor(15)
   oDlg:lHelpIcon = .f.

   REDEFINE CALENDAR oCalendar VAR dFecha ;
      ID 11 OF oDlg DBLCLICK  ( lOk := .t., oDlg:End())

   oCalendar:oCursor := TCursor():New(,'HAND')

   ACTIVATE DIALOG oDlg               ;
      ON PAINT ( oDlg:Move(aPoint[1], aPoint[2],,,.t.), ;
                 oCalendar:SetFocus(.t.) )

   if lOK
      oGet:cText( oCalendar:dDate )
      sysrefresh()
   endif

return NIL

function AdjustWnd( oBtn, nWidth, nHeight )
   local nMaxWidth, nMaxHeight
   local aPoint

   aPoint := { oBtn:nTop + oBtn:nHeight(), oBtn:nLeft }
   clientToScreen( oBtn:oWnd:hWnd, @aPoint )
   nMaxWidth  := GetSysMetrics(0)
   nMaxHeight := GetSysMetrics(1)

   if  aPoint[2] + nWidth > nMaxWidth
      aPoint[2] := nMaxWidth -  nWidth
   endif

   if  aPoint[1] + nHeight > nMaxHeight
      aPoint[1] := nMaxHeight - nHeight
   endif
return aPoint


y los recursos estos:
Code: Select all  Expand view

LANGUAGE 0, SUBLANG_NEUTRAL
selecfecha DIALOG 46, 44, 192, 113
STYLE DS_3DLOOK | DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU
CAPTION "Selec Fecha"
FONT 10, "Calibri"
{
    LTEXT           "Fecha", IDC_STATIC, 16, 24, 32, 9, SS_LEFT
    EDITTEXT        101, 50, 22, 54, 12, ES_AUTOHSCROLL
    PUSHBUTTON      "...", 102, 106, 22, 14, 12
}

LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN
UT_CALENDAR DIALOG 126, 49, 127, 100
STYLE DS_SETFONT | WS_POPUP | WS_SYSMENU
FONT 10, "Calibri Light"
{
    CONTROL         "", 11, "SysMonthCal32", 0, 0, 0, 127, 100
}


Saludos,

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Fri Dec 16, 2022 9:15 pm
by Antonio Linares
José Luis,

Tu ejemplo funciona aqui bien :-)

Dime que compilador de C usas y te envio el EXE y las libs

Re: DBLCLICK en TCALeNDAR no funciona

PostPosted: Sat Dec 17, 2022 7:13 am
by José Luis Sánchez
Antonio,
uso BCC7, FWH2210 y harbour_win32_bcc_2020_10_19
¿ Es posible que el problema sea mi versión de BCC ?
Saludos,