Salir de DTPICKER con VK_ESCAPE (Cerrado)

Salir de DTPICKER con VK_ESCAPE (Cerrado)

Postby albeiroval » Fri Jun 16, 2017 3:46 pm

Hola,

Como puedo salir de un control DTPICKER con la tecla VK_ESCAPE,

Dejo aqui un ejemplo :

Codigo PRG
Code: Select all  Expand view

#include "fivewin.ch"
#include "dtpicker.ch"

Function Main()
  Local Ofont
  Local oDlg
  Local h     := {=>}
  Local oGet  := Array(2)
    Local oBtn  := Array(2)
    Local lExit := .F.
   
    h["fecha"]  := Date()
    h["serial"] := Space(10)
   
    DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12 BOLD
 
  DEFINE DIALOG oDlg RESOURCE "LEE_DATOS" TITLE "Prueba VK_ESCAPE" FONT oFont
 
  REDEFINE SAY ID 100 OF oDlg PROMPT "Fecha :"
  REDEFINE SAY ID 101 OF oDlg   PROMPT "Serial Fiscal :"   

    REDEFINE DTPICKER oGet[1] VAR h["fecha"] ID 200 OF oDlg;
    VALID ValidaFecha( h )
       
  REDEFINE GET oGet[2] VAR h["serial"] ID 201 OF oDlg;
    PICTURE "@!"
   
  REDEFINE BTNBMP oBtn[1] ID 300 OF oDlg 2007;
    CENTER;
    ACTION (lExit:= .T., lProcess:= .T., oDlg:End())
             
  REDEFINE BTNBMP oBtn[2] ID 301 OF oDlg 2007;
    CENTER;
    ACTION ( lExit:= .T., lProcess:= .F., oDlg:End() )
    oBtn[2]:lCancel = .T.  
   
  AEval( oDlg:aControls, {|o| o:bKeydown := {|nKey| bKeydown(nKey, oGet, oBtn)}} )  
   
  ACTIVATE DIALOG oDlg;
    VALID lExit
 
  oFont:End()  
       
Return Nil     

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

static Function ValidaFecha( h )
    Local lSucess := .T.

  if h["fecha"] > Date()
         MsgStop("Fecha Invalida", "Error")
         lSucess := .F.
    endif   
   
Return lSucess

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

static Function bKeydown( nKey, oGet, oBtn )
 
  if GetKeyState(VK_ESCAPE)
       Eval(oBtn[2]:bAction)
    endif   
    
Return Nil  
 


Codigo RC
Code: Select all  Expand view

LEE_DATOS DIALOGEX DISCARDABLE 6, 18, 290, 110
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 10, "MS Shell Dlg"
{
  CONTROL "", 4000, "Button", BS_GROUPBOX, 8, 8, 276, 56
  CONTROL "FECHA", 100, "Static", WS_GROUP, 16, 24, 68, 8
  CONTROL "SERIAL", 101, "Static", WS_GROUP, 16, 40, 68, 8
  CONTROL "", 200, "SysDateTimePick32", WS_TABSTOP, 92, 24, 64, 12
  CONTROL "Editar", 201, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 92, 40, 160, 12
  CONTROL "Ok", 300, "TBtnBmp", WS_TABSTOP|0x00800000, 28, 72, 68, 20
  CONTROL "Salir", 301, "TBtnBmp", WS_TABSTOP|0x00800000, 184, 72, 68, 20
}
 
Last edited by albeiroval on Thu Jun 22, 2017 3:37 am, edited 1 time in total.
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
User avatar
albeiroval
 
Posts: 358
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

Re: Salir de DTPICKER con VK_ESCAPE

Postby carlos vargas » Fri Jun 16, 2017 5:58 pm

aca si me funciona, cierra el dialogo, lo que si no funciona es que no captura teclas, ni con keychar ni con keydown
Code: Select all  Expand view
#include "dtpicker.ch"
#include "fivewin.ch"

procedure main()
 local oD, oDP, oG1, oG2
 local dDate := date(), cData1 := "Hola Mundo!", cData2 := "Hello Word!"

 define dialog oD name "dlg_dp"

 redefine get oG1 var cData1;
  id 101 of oD

 redefine DTPICKER oDP VAR dDate;
  id 102 of oD
 
 redefine get oG2 var cData2;
  id 103 of oD

 oG1:bKeyChar := {|n| if(n==VK_ESCAPE, MsgInfo("EscapeGet1KC"), nil) }
 oG1:bKeyDown := {|n| if(n==VK_ESCAPE, MsgInfo("EscapeGet1KD"), nil) }

 oDP:bKeyChar := {|n| if(n==VK_ESCAPE, MsgInfo("EscapeDatePickerKC"), nil) }
 oDP:bKeyDown := {|n| if(n==VK_ESCAPE, MsgInfo("EscapeDatePickerKD"), nil) }

 redefine btnbmp prompt "Action";
  id 201 of oD action MsgInfo("ok: " + dtoc(dDate) )

 redefine btnbmp prompt "Close";
  id 202 of oD action oD:end()

 activate dialog oD

return
 

Code: Select all  Expand view

// Generated by ResEdit 1.6.6
// Copyright (C) 2006-2015
// http://www.resedit.net

#include <winresrc.h>
#include <windows.h>
#include <commctrl.h>

#define WC_TABCONTROL   "SysTabControl32"
#define MONTHCAL_CLASS  "SysMonthCal32"
#define DATETIMEPICK_CLASS "SysDateTimePick32"

#include "resource.h"




//
// Dialog resources
//
dlg_dp DIALOG 0, 0, 215, 96
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "Ms Shell Dlg"
{
    EDITTEXT        101, 86, 11, 100, 14, ES_AUTOHSCROLL, WS_EX_LEFT
    CONTROL         "", 102, DATETIMEPICK_CLASS, WS_TABSTOP | DTS_RIGHTALIGN, 87, 30, 100, 15, WS_EX_LEFT
    EDITTEXT        103, 87, 50, 100, 14, ES_AUTOHSCROLL, WS_EX_LEFT
    CONTROL         "", 201, "TBtnBmp", 0x50020000, 87, 74, 47, 15, 0x00000000
    CONTROL         "", 202, "TBtnBmp", 0x50020000, 139, 74, 47, 15, 0x00000000
    LTEXT           "Fecha:", -1, 28, 30, 54, 9, SS_LEFT, WS_EX_LEFT
    LTEXT           "Dato:", -1, 28, 50, 54, 9, SS_LEFT, WS_EX_LEFT
    LTEXT           "Dato:", -1, 28, 11, 54, 9, SS_LEFT, WS_EX_LEFT
}

 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1680
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Salir de DTPICKER con VK_ESCAPE

Postby albeiroval » Sat Jun 17, 2017 12:12 am

Carlos,

En tu ejemplo el DTPICKER es el segundo control, seria bueno que probaras colocando
el DTPICKER como primer control a ver si cierra el dialogo.
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
User avatar
albeiroval
 
Posts: 358
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

Re: Salir de DTPICKER con VK_ESCAPE

Postby horacio » Sat Jun 17, 2017 12:17 am

No lo probé con ese control pero si con otros. Si el objeto es oDpk es el dtpicker y oDlg el dialogo que lo contiene

Code: Select all  Expand view

oDpk : oWnd : bKeyDown := { | nKey | If( nKey == VK_ESCAPE, oDlg : End(), ) }
 


Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Salir de DTPICKER con VK_ESCAPE

Postby albeiroval » Sat Jun 17, 2017 12:25 am

Horacio,

Pruebo tu codigo y comento, gracias.
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
User avatar
albeiroval
 
Posts: 358
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

Re: Salir de DTPICKER con VK_ESCAPE

Postby albeiroval » Wed Jun 21, 2017 3:40 am

Horacio,

Tampoco funciona
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
User avatar
albeiroval
 
Posts: 358
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

Re: Salir de DTPICKER con VK_ESCAPE (Cerrado)

Postby albeiroval » Thu Jun 22, 2017 3:36 am

Comentario,

Cuando el dialogo tiene un valid, es cuando no evalua el evento VK_ESCAPE, por lo tanto
para esos casos no sirve el dtpicker ya que no evalua bKeydown.

Gracias a Carlos Vargas, lo solvente de una manera mas elegante usando este codigo :

Code: Select all  Expand view

REDEFINE GET oGet[1] VAR h["fecha"] ID 200 OF oDlg ;
    PICTURE "@D";
    BITMAP aBitmap[ BMP16_CALENDAR ];
    VALID ValidaFecha( h );
    ACTION ( h["fecha"] := MsgDate( h["fecha"], "Seleccione fecha", oGet[1] ) )
 
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
User avatar
albeiroval
 
Posts: 358
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela


Return to FiveWin para Harbour/xHarbour

Who is online

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