TIMEpicker versus DTPICKER

TIMEpicker versus DTPICKER

Postby JmGarcia » Mon Jul 07, 2008 9:19 am

¿ Existe algun TIMEpicker ?

Algo parecido a DTPICKER pero para HH:MM:SS.

Es decir, para cambiar la hora como cuando accedemos a "Propiedades de Fecha y hora" de Windows.

Gracias.
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Postby pablovidal » Mon Jul 07, 2008 10:46 am

Aki la tienes, Tal cual la tengo... No se quien la escribio...
Code: Select all  Expand view  RUN
#include "FiveWin.ch"
#include "constant.ch"

#define COLOR_WINDOW         5
#define COLOR_WINDOWTEXT     8

#define CS_DBLCLKS           8

#ifdef __XPP__
   #define Super ::TControl
   #define New _New
#endif

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

CLASS TTimePick FROM TControl

   CLASSDATA lRegistered

   METHOD New( nRow, nCol, bSetGet, oWnd, nWidth, nHeight, bValid, nClrFore,;
               nClrBack, oFont, lDesign, oCursor, lPixel, cMsg, lUpdate,;
               bWhen, bChange, nHelpId) CONSTRUCTOR

   METHOD ReDefine( nId, bSetGet,oWnd, nHelpId, cMsg, lUpdate, bWhen, bValid) CONSTRUCTOR

   METHOD cText( cText ) SETGET

   METHOD cToChar() INLINE Super:cToChar( "SysDateTimePick32" )

   METHOD Initiate( hDlg )

   METHOD SetTime( cHour )

   METHOD GetTime()        INLINE GetTimePick( ::hWnd )

   METHOD LostFocus( hCtrl )
   METHOD Change()
   METHOD Changed() INLINE ( Eval( ::bSetGet, ::GetTime() ), ::Change() )

   METHOD Refresh() INLINE ::SetTime( Eval( ::bSetGet ) )

ENDCLASS

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

METHOD New( nRow, nCol, bSetGet, oWnd, nWidth, nHeight, bValid, nClrFore,;
            nClrBack, oFont, lDesign, oCursor, lPixel, cMsg, lUpdate,;
            bWhen, bChange, nHelpId) Class TTimePick

   DEFAULT nRow     := 0, nCol := 0,;
           oWnd     := GetWndDefault(),;
           nWidth   := 100,;
           nHeight  := If( oFont != nil, oFont:nHeight, 22 ),;
           nClrFore := GetSysColor( COLOR_WINDOWTEXT ),;
           nClrBack := GetSysColor( COLOR_WINDOW ),;
           oFont    := oWnd:oFont,;
           nHelpId  := 100,;
           lDesign  := .f.,;
           lPixel   := .f.,;
           lUpdate  := .f.

   ::cCaption  = ""
   ::nTop      = nRow * If( ! lPixel, BTN_CHARPIX_H, 1 )
   ::nLeft     = nCol * If( ! lPixel, BTN_CHARPIX_W, 1 )
   ::nBottom   = ::nTop  + nHeight
   ::nRight    = ::nLeft + nWidth
   ::nHelpId   = nHelpId
   ::oWnd      = oWnd
   ::oFont     = oFont
   ::bSetGet   = bSetGet
   ::nStyle    = nOR( WS_CHILD, WS_VISIBLE, WS_TABSTOP,;
                     If( lDesign, WS_CLIPSIBLINGS, 0 ) )

   ::nId       = ::GetNewId()
   ::lDrag     = lDesign
   ::lCaptured = .f.
   ::cMsg      = cMsg
   ::lUpdate   = lUpdate
   ::bWhen     = bWhen
   ::bValid    = bValid
   ::bChange   = bChange

   InitCommon()

   if ! Empty( oWnd:hWnd )
      ::Create( "SysDateTimePick32" )
      oWnd:AddControl( Self )
      if oFont != nil
         ::SetFont( oFont )
      endif
   else
      oWnd:DefControl( Self )
   endif

   if lDesign
      ::CheckDots()
   endif

return Self

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

METHOD ReDefine( nId, bSetGet, oWnd, nHelpId, nClrFore, nClrBack,;
                 oFont, oCursor, cMsg, lUpdate, bWhen, bValid, bChanged ) Class TTimePick


   DEFAULT oWnd     := GetWndDefault(),;
           nClrFore := GetSysColor( COLOR_WINDOWTEXT ),;
           nClrBack := GetSysColor( COLOR_WINDOW ),;
           lUpdate  := .f.

   ::nId       = nId
   ::hWnd      = 0
   ::nHelpId   = nHelpId
   ::oWnd      = oWnd
   ::oFont     = oFont
   ::oCursor   = oCursor
   ::lCaptured = .f.
   ::lDrag     = .f.
   ::cMsg      = cMsg
   ::lUpdate   = lUpdate
   ::bWhen     = bWhen
   ::bValid    = bValid
   ::bSetGet   = bSetGet
   ::bChange   = bChanged

   InitCommon()

   ::Register()

   oWnd:DefControl( Self )

return Self

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

METHOD Initiate( hDlg ) Class TTimePick

   Super:Initiate( hDlg )

   ::cText = Eval( ::bSetGet )

return nil

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

METHOD cText( uVal ) CLASS TTimePick

   if PCount() == 1
      Eval( ::bSetGet, uVal )
      ::SetTime( uVal )
      ::Refresh()
      ::Change()
   endif

return ::GetTime()

//---------------------------------------------------------------------------//
// Controlo si la hora esta vacia para quitar la marca del checkbox incluido en el campo
// Hay pasar una fecha para que valide la hora, por eso siempre paso la fecha de actual Date()
// El octavo parametro indica el estado del checkbox. 0 Marcado, 1 Desmarcado.

METHOD SetTime( cHour ) CLASS TTimePick
   local cShow, nHora, nMinut, nSeg
   cShow  := if( Empty(cHour), Hora(), cHour )
   nHora  := Val(left(cShow, 2))
   nMinut := Val(SubStr(cShow, 3, 2))
   nSeg   := Val(Right(cShow, 2))
   SetTimePick( ::hWnd, Year( Date() ), Month( Date() ), Day( Date() ),;
                nHora, nMinut, nSeg, 0 )
   if Empty(cHour)
     SetTimePick( ::hWnd, Year( Date() ), Month( Date() ), Day( Date() ),;
                  nHora, nMinut, nSeg, 1 )
   endif
return self

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

METHOD LostFocus( hCtrl )  CLASS TTimePick

   Eval( ::bSetGet, ::cText )

return Super:LostFocus( hCtrl )

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

METHOD Change() CLASS TTimePick

   if ::bChange != nil
      Eval( ::bChange, Self )
   endif

return nil

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

FUNCTION Hora()

  local nAux, nMin, nHor, nSec, cMin, cHor, cSec
  nSec := Seconds()
  nAux := Int(nSec) / 3600
  nHor := Int(nAux)
  nAux := (nAux - nHor) * 60
  nMin := Int(nAux)
  nSec := Int( (nAux - nMin) * 60 )
  cHor := Padl( alltrim(str(nHor)), 2, '0')
  cMin := Padl( alltrim(str(nMin)), 2, '0')
  cSec := Padl( alltrim(str(nSec)), 2, '0')

return cHor + cMin + cSec




#define _WIN32_WINNT   0x0400

//#include <WinTen.h>
//#include <Windows.h>
//#include <ClipApi.h>
//#include <shlobj.h>
//#include <commctrl.h>

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

#ifdef __HARBOUR__
   CLIPPER SETTIMEPICK( PARAMS ) // ( hWnd, wYear, wMonth, wDay, wHour, wMinute, wSecond, GTD_NONE )
#else
   CLIPPER SETTIMEPIC( PARAMS )
#endif
{
   SYSTEMTIME sysTime;

   sysTime.wYear         = _parni( 2 );
   sysTime.wMonth        = _parni( 3 );
   sysTime.wDay          = _parni( 4 );
   sysTime.wDayOfWeek    = 0;
   sysTime.wHour         = _parni( 5 );
   sysTime.wMinute       = _parni( 6 );
   sysTime.wSecond       = _parni( 7 );
   sysTime.wMilliseconds = 0;

   SendMessage( ( HWND ) _parnl( 1 ), DTM_SETSYSTEMTIME, _parni( 8),
                ( LPARAM ) &sysTime );
}

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

#ifdef __HARBOUR__
   CLIPPER GETTIMEPICK( PARAMS ) // ( hWnd ) --> dDate
#else
   CLIPPER GETTIMEPICK( PARAMS )
#endif
{
   SYSTEMTIME st;
   char hour[ 7 ];

   SendMessage( ( HWND ) _parnl( 1 ), DTM_GETSYSTEMTIME, 0, ( LPARAM ) &st );
   wsprintf( hour, "%2i%02i%02i", st.wHour, st.wMinute, st.wSecond );

   _retc( hour );
}

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

Saludos,

Pablo Alberto Vidal
/*
------------------------------------------------------
Harbour 3.2.0, Fivewin 17.02, BCC7
------------------------------------------------------
*/
User avatar
pablovidal
 
Posts: 401
Joined: Thu Oct 06, 2005 10:15 pm
Location: Republica Dominicana

Postby JmGarcia » Mon Jul 07, 2008 2:24 pm

Muchas gracias pablovidal.

¿ Tenemos el fichero CH ?

Por otro lado me da estos errores al compilar:
Code: Select all  Expand view  RUN
C:\TTimePick.prg(223) Error E0030  Syntax error: "syntax error at 'SETTIMEPICK'"
C:\TTimePick.prg(229) Error E0030  Syntax error: "syntax error at 'SYSTIME'"
C:\TTimePick.prg(238) Error E0030  Syntax error: "syntax error at '='"
C:\TTimePick.prg(239) Error E0030  Syntax error: "syntax error at '_PARNL'"
C:\TTimePick.prg(241) Error E0030  Syntax error: "syntax error at '&SYSTIME'"
C:\TTimePick.prg(246) Error E0030  Syntax error: "syntax error at 'GETTIMEPICK'"
C:\TTimePick.prg(253) Error E0030  Syntax error: "syntax error at 'ST'"
C:\TTimePick.prg(256) Error E0030  Syntax error: "syntax error at '_PARNL'"
C:\TTimePick.prg(258) Error E0030  Syntax error: "syntax error at '}'"


Lineas:
Code: Select all  Expand view  RUN
#ifdef __HARBOUR__
   CLIPPER SETTIMEPICK( PARAMS ) // LINEA 223
#else
   CLIPPER SETTIMEPIC( PARAMS )
#endif


Es de cir en toda la parte de código C.
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Postby pablovidal » Mon Jul 07, 2008 5:29 pm

Aki esta el CH
Code: Select all  Expand view  RUN
#command @ <nRow>, <nCol> TMPICKER [ <oDTPicker> VAR ] <uVar> ;
            [ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
            [ VALID <ValidFunc> ] ;
            [ <color:COLOR,COLORS> <nClrFore> [,<nClrBack>] ] ;
            [ SIZE <nWidth>, <nHeight> ]  ;
            [ FONT <oFont> ] ;
            [ <design: DESIGN> ] ;
            [ CURSOR <oCursor> ] ;
            [ <pixel: PIXEL> ] ;
            [ MESSAGE <cMsg> ] ;
            [ <update: UPDATE> ] ;
            [ WHEN <uWhen> ] ;
            [ ON CHANGE <uChange> ] ;
            [ <help:HELPID, HELP ID> <nHelpId> ] ;
       => ;
          [ <oDTPicker> := ] TTimePick():New( <nRow>, <nCol>, bSETGET(<uVar>),;
                                        [<oWnd>], <nWidth>, <nHeight>, <{ValidFunc}>,;
                                        <nClrFore>, <nClrBack>, <oFont>, <.design.>,;
                                        <oCursor>, <.pixel.>, <cMsg>, <.update.>, <{uWhen}>,;
                                        [\{|nKey, nFlags, Self| <uChange>\}], <nHelpId> )


#xcommand REDEFINE TMPICKER [ <oTMPicker> VAR ] <uVar> ;
             [ ID <nId> ] ;
             [ <dlg: OF, WINDOW, DIALOG> <oDlg> ] ;
             [ <help:HELPID, HELP ID> <nHelpId> ] ;
             [ <color: COLOR,COLORS> <nClrFore> [,<nClrBack>] ] ;
             [ FONT <oFont> ] ;
             [ CURSOR <oCursor> ] ;
             [ MESSAGE <cMsg> ] ;
             [ <update: UPDATE> ] ;
             [ WHEN <uWhen> ] ;
             [ VALID <uValid> ] ;
             [ ON CHANGE <uChange> ] ;
       => ;
          [ <oTMPicker> := ] TTimePick():Redefine( <nId>, bSETGET(<uVar>),;
             <oDlg>, <nHelpId>, <nClrFore>, <nClrBack>, <oFont>, <oCursor>,;
             <cMsg>, <.update.>, <{uWhen}>, <{uValid}>,;
             [\{|nKey, nFlags, Self| <uChange>\}] )



De los errores no se, por que no la he usado nunca...
Saludos,

Pablo Alberto Vidal
/*
------------------------------------------------------
Harbour 3.2.0, Fivewin 17.02, BCC7
------------------------------------------------------
*/
User avatar
pablovidal
 
Posts: 401
Joined: Thu Oct 06, 2005 10:15 pm
Location: Republica Dominicana

Postby quique » Mon Jul 07, 2008 6:03 pm

cambia las líneas
Code: Select all  Expand view  RUN
#ifdef __HARBOUR__
   CLIPPER SETTIMEPICK( PARAMS ) // LINEA 223
#else
   CLIPPER SETTIMEPIC( PARAMS )
#endif
por
Code: Select all  Expand view  RUN
#ifdef __HARBOUR__
   HB_FUNC( SETTIMEPICK ) // LINEA 223
#else
   HB_FUNC( SETTIMEPIC )
#endif
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Postby fgondi » Mon Jul 07, 2008 7:01 pm

Pablo, Quique

Desde hace unas cuantas versiones la clase tTimePick se distribuye con FWH.
La clase se encuentra en el archivo: \source\classes\ttmpicke.prg
Las funciones en c necesarias en el archivo: \source\winapi\timepick.c
Los defines necesarios en el archivo: \include\dtpicker.ch

Dentro de la librería de FWH se incluye la compilación de timepick.c pero no la compilación de ttmpicke.prg.

Desconozco el porque no está incluido en la librería, pero puedes incluirlo en tu aplicación y listo.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby quique » Tue Jul 08, 2008 3:11 am

gracias por la aclaración
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Postby JmGarcia » Tue Jul 08, 2008 8:40 am

Muchas gracias a todos... ya voy viendo la luz al final del tunel.

Una cosa mas...

El codigo de un fichero de recursos para el DTPICKER es algo asi:
Code: Select all  Expand view  RUN
CONTROL "", 204, "SysDateTimePick32", 0 | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 210, 20, 50-2, 13


¿ Como es para el TTimePick ?
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Postby fgondi » Tue Jul 08, 2008 9:07 am

El recurso para el formato hora es así:

Code: Select all  Expand view  RUN
CONTROL "", 204, "SysDateTimePick32", 0 | DTS_TIMEFORMAT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 210, 20, 50-2, 13
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby JmGarcia » Wed Jul 09, 2008 10:49 am

fgondi wrote:El recurso para el formato hora es así:
CONTROL "", 204, "SysDateTimePick32", 0 | DTS_TIMEFORMAT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 210, 20, 50-2, 13

En un ejemplo he visto que cambia el 0 por 9 sin poner DTS_TIMEFORMAT, lo he hecho y funciona.

Posteriormente me he encontrado esto (y ya veo porque es 9):
Code: Select all  Expand view  RUN
#define DTS_UPDOWN          0x0001 // use UPDOWN instead of MONTHCAL
#define DTS_SHOWNONE        0x0002 // allow a NONE selection
#define DTS_SHORTDATEFORMAT 0x0000 // use the short date format (app must forward WM_WININICHANGE messages)
#define DTS_LONGDATEFORMAT  0x0004 // use the long date format (app must forward WM_WININICHANGE messages)
#define DTS_TIMEFORMAT      0x0009 // use the time format (app must forward WM_WININICHANGE messages)
#define DTS_APPCANPARSE     0x0010 // allow user entered strings (app MUST respond to DTN_USERSTRING)
#define DTS_RIGHTALIGN      0x0020 // right-align popup instead of left-align it


Bueno, pues eso, que me funciona todo perfectamente...
Gracias a todos.
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 57 guests