DBLCLICK en TCALeNDAR no funciona

User avatar
José Luis Sánchez
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

DBLCLICK en TCALeNDAR no funciona

Post 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 _ de los 3 meses desplegados sobre el formulario no muestra el msginfo() con la fecha seleccionada.
Saludos,
José Luis
User avatar
Antonio Linares
Site Admin
Posts: 42259
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
José Luis Sánchez
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post 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,
Ariel
Posts: 377
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: DBLCLICK en TCALeNDAR no funciona

Post by Ariel »

Jose luis,

Prueba de comentar en el prg :

// METHOD HandleEvent() VIRTUAL

Saludos.
User avatar
Antonio Linares
Site Admin
Posts: 42259
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post 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 :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
José Luis Sánchez
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post by José Luis Sánchez »

Muchas gracias Antonio.
User avatar
cnavarro
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: DBLCLICK en TCALeNDAR no funciona

Post by cnavarro »

Jose Luis, he estado haciendo pruebas y he conseguido que funcione haciendo los siguientes cambios en la clase

Code: Select all | Expand


   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
User avatar
José Luis Sánchez
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post by José Luis Sánchez »

Gracias Cristóbal, lo pruebo esta tarde y te comento.
Saludos,
User avatar
José Luis Sánchez
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post 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

      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

   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
User avatar
Antonio Linares
Site Admin
Posts: 42259
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post by Antonio Linares »

José Luis,

Estoy probándolo, modificando samples\testcal.prg de esta forma:

Code: Select all | Expand

  @ 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

@ 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
User avatar
José Luis Sánchez
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post 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,
User avatar
Antonio Linares
Site Admin
Posts: 42259
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
José Luis Sánchez
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post by José Luis Sánchez »

Hola Antonio:
el código es este:

Code: Select all | Expand

#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

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,
User avatar
Antonio Linares
Site Admin
Posts: 42259
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post by Antonio Linares »

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
User avatar
José Luis Sánchez
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

Re: DBLCLICK en TCALeNDAR no funciona

Post 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,
Post Reply