Page 1 of 2
DBLCLICK en TCALeNDAR no funciona
Posted: 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 _ 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
Posted: 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
Posted: 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
Posted: 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
Posted: 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
Posted: Mon Dec 12, 2022 3:47 pm
by José Luis Sánchez
Muchas gracias Antonio.
Re: DBLCLICK en TCALeNDAR no funciona
Posted: 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
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
Posted: 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
Posted: 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
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
Re: DBLCLICK en TCALeNDAR no funciona
Posted: 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
@ 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...
Re: DBLCLICK en TCALeNDAR no funciona
Posted: 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
Posted: 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
Posted: Fri Dec 16, 2022 5:10 pm
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,
Re: DBLCLICK en TCALeNDAR no funciona
Posted: 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
Posted: 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,