FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour DBLCLICK en TCALeNDAR no funciona
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
DBLCLICK en TCALeNDAR no funciona
Posted: Mon Dec 12, 2022 09:54 AM

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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Mon Dec 12, 2022 10:06 AM

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Mon Dec 12, 2022 10:08 AM

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,

Posts: 389
Joined: Wed Nov 29, 2006 01:51 PM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Mon Dec 12, 2022 10:55 AM

Jose luis,

Prueba de comentar en el prg :

// METHOD HandleEvent() VIRTUAL

Saludos.

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Mon Dec 12, 2022 11:21 AM
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 :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Mon Dec 12, 2022 03:47 PM

Muchas gracias Antonio.

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Tue Dec 13, 2022 08:05 PM
Jose Luis, he estado haciendo pruebas y he conseguido que funcione haciendo los siguientes cambios en la clase
Code (fw): Select all Collapse
   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
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Wed Dec 14, 2022 06:53 AM

Gracias Cristóbal, lo pruebo esta tarde y te comento.

Saludos,

Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Wed Dec 14, 2022 03:53 PM
Cristóbal,
lo acabo de probar con tus modificaciones, cuando hago dobleclick sobre un calendario se ejecuta este código
Code (fw): Select all Collapse
      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 (fw): Select all Collapse
   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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Wed Dec 14, 2022 04:45 PM
José Luis,

Estoy probándolo, modificando samples\testcal.prg de esta forma:
Code (fw): Select all Collapse
  @ 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 (fw): Select all Collapse
@ 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...
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Fri Dec 16, 2022 07:07 AM

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,

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Fri Dec 16, 2022 08:51 AM

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Fri Dec 16, 2022 05:10 PM
Hola Antonio:
el código es este:
Code (fw): Select all Collapse
#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 (fw): Select all Collapse
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,
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Fri Dec 16, 2022 09:15 PM
José Luis,

Tu ejemplo funciona aqui bien :-)

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

Antonio Linares
www.fivetechsoft.com
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: DBLCLICK en TCALeNDAR no funciona
Posted: Sat Dec 17, 2022 07:13 AM

Antonio,

uso BCC7, FWH2210 y harbour_win32_bcc_2020_10_19

¿ Es posible que el problema sea mi versión de BCC ?

Saludos,