FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Capturar pulsaci贸n de tecla ESC en DIALOG
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Capturar pulsaci贸n de tecla ESC en DIALOG
Posted: Wed Jul 14, 2021 09:26 PM

Hola a todos,

驴Es posible capturar/interceptar la pulsaci贸n de la tecla ESC en un DIALOG?

Gracias,

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Capturar pulsaci贸n de tecla ESC en DIALOG
Posted: Thu Jul 15, 2021 12:41 AM
Esto?

Code (fw): Select all Collapse
   LOCAL nKey := VK_RETURN

      REDEFINE BUTTONBMP oSaida    ID 302 OF oDlgGrava                       ;
         RESOURCE "154" TEXTRIGHT                                            ;
         ACTION( ( nKey := VK_ESCAPE, lGravacao := .F., oDlgGrava:End() ) ) CANCEL

      IF nKey = VK_ESCAPE .OR. .NOT. lGravacao // := .F.

         SELECT( DBCADPROPO )  // CADASTRO DE PROPOSTAS
         SET ORDER TO 01

         GO TOP

         oLbx:Refresh()

         lGravacao := .F.

         RETURN NIL

      ENDIF

   DO CASE
   CASE nKey == VK_ESCAPE .OR. GetKeyState( VK_ESCAPE )

      lConfirma := .F.
    
   ENDCASE


Regards, saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Capturar pulsaci贸n de tecla ESC en DIALOG
Posted: Thu Jul 15, 2021 12:47 AM
Code (fw): Select all Collapse
   #define DLGC_WANTALLKEYS 4

   REDEFINE BUTTON oBtn[ 1 ] ID 635 OF oMap30;
      ACTION( pPR_A_COD := TMP1, ;
      TESTE2( oWnd, oAgen, oMap30, pPR_A_COD ) )

   oBtn[ 1 ]:bKeyDown := {| nKey | IF( nKey = VK_ESCAPE, ( Ver_Tecla1() ), NIL ) }

   oBtn[ 1 ]:nDlgCode := DLGC_WANTALLKEYS


FUNCTION Main()

   LOCAL oDlg

   DEFINE DIALOG oDlg

   ACTIVATE DIALOG oDlg CENTERED VALID SAIDA( oDlg )

FUNCTION SAIDA( oDlg )

   IF getkeystate( VK_ESCAPE )
      msgstop( "Estou encerrando pela tecla ESC !!!" )
   ELSE
      MsgInfo( "cerrado de otra forma" )
   ENDIF

RETURN .T.


Regards, saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Capturar pulsaci贸n de tecla ESC en DIALOG
Posted: Thu Jul 15, 2021 10:15 AM

Carlos,

ACTIVATE DIALOG oDlg CENTERED

MsgInfo( oDlg:nResult )

nResult vale 2 cuando se ha cancelado el di谩logo

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Capturar pulsaci贸n de tecla ESC en DIALOG
Posted: Sat Jul 17, 2021 09:39 PM

Gracias Karinha.

Seguir茅 las indicaciones de Antonio y adaptar茅 la funci贸n a mis necesidades.

Saludos,

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Capturar pulsaci贸n de tecla ESC en DIALOG
Posted: Sat Jul 17, 2021 09:44 PM
Antonio Linares wrote:Carlos,

ACTIVATE DIALOG oDlg CENTERED

MsgInfo( oDlg:nResult )

nResult vale 2 cuando se ha cancelado el di谩logo


Gracias Antonio, finalmente he tocado un poco la funci贸n a ver que tal.
Sobre todo en cuanto a la llamada al m茅todo End() del DIALOG ( :End( IDOK ) ), al cual si no se le pasa valor aplica por defecto :nResult = 2.
Tambi茅n le he a帽adido que pueda recibir un oFont definido por el usuario.

Parece que a mi me funciona bien.

Code (fw): Select all Collapse
#include "FiveWin.ch"
#include "constant.ch"

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

function My_MsgList( aData, cTitle, nTop, nLeft, nBottom, nRight, cBtnTitle, nItem, lCancel, cCapCan, oFont )

聽 聽//LOCAL oFont, 聽 聽13/07/2021
聽 聽Local lKillOfont := .F. 聽 聽 聽// 13/07/2021

聽 聽LOCAL oLst, oBtnClose1, oBtnClose2
聽 聽LOCAL nCol1, nRow, nCol2, oDlg, nWidth, nHeight

聽 聽DEFAULT nBottom 聽 := 13,;
聽 聽 聽 聽 聽 聽nRight 聽 聽:= 59.5,;
聽 聽 聽 聽 聽 聽cTitle 聽 聽:= "Array list", ;
聽 聽 聽 聽 聽 聽cBtnTitle := "&OK", ;
聽 聽 聽 聽 聽 聽cCapCan 聽 := "&CANCEL",;
聽 聽 聽 聽 聽 聽nItem 聽 聽 := 聽1, ;
聽 聽 聽 聽 聽 聽lCancel 聽 := .F.

聽 聽nWidth = 聽Max( nRight * DLG_CHARPIX_W, 180 )
聽 聽nHeight = nBottom * DLG_CHARPIX_H

聽 聽// 13/07/2021
聽 聽If oFont == nil
聽 聽 聽 聽DEFINE FONT oFont NAME GetSysFont() SIZE 0, -8 聽
聽 聽 聽 聽lKillOfont := .T.
聽 聽EndIF
聽 聽// 13/07/2021

聽 聽//DEFINE FONT oFont NAME GetSysFont() SIZE 0, -8 13/07/2021

聽 聽DEFINE DIALOG oDlg SIZE nWidth, nHeight PIXEL;
聽 聽 聽 聽 聽 TITLE cTitle FONT oFont ;
聽 聽 聽 聽 聽 STYLE nOr(WS_POPUP, WS_CAPTION, WS_BORDER, WS_THICKFRAME, WS_CLIPCHILDREN )
聽 聽oDlg:lTruePixel := .f.

聽 聽@ 4, 3 LISTBOX oLst VAR nItem ITEMS aData OF oDlg PIXEL SIZE nWidth / 2 - 4, nHeight / 2 - 20

聽 聽oLst:bLDblClick := {|| oDlg:End( IDOK ) }

聽 聽IF lCancel
聽 聽 聽 @ 聽nHeight / 2 - 15, nWidth / 2 - 41 BUTTON oBtnClose1 PROMPT cCapCan SIZE 36, 13 PIXEL ;
聽 聽 聽 聽 聽ACTION (nItem := 0, oDlg:End()) UPDATE CANCEL OF oDlg
聽 聽 聽 聽 聽//ACTION (nItem := 0, oDlg:End()) UPDATE 聽 聽 聽 13/07/2021
聽 聽ENDIF

聽 聽@ nHeight / 2 - 15, If( lCancel, 5, nWidth / 2 - 41 ) BUTTON oBtnClose2 PROMPT cBtnTitle DEFAULT SIZE 36, 13 PIXEL ;
聽 聽 聽 ACTION oDlg:End( IDOK ) UPDATE OF oDlg

聽 聽oDlg:bResized = { | nType, nWidth, nHeight | oLst:SetSize( nWidth - 8, nHeight - 40 ),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 nRow := nHeight - 30,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 nCol2 := 聽nWidth - 82,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 If( lCancel,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ( nCol1 := nWidth - 82,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oBtnClose1:Move( nRow, nCol1 ),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 nCol2 := 10 ), ),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oBtnClose2:Move( nRow, nCol2 ),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oLst:Refresh(), oDlg:Refresh() }


聽 聽ACTIVATE DIALOG oDlg CENTERED

聽 聽// 13/07/2021
聽 聽If ValType( oDlg:nResult ) == "N"
聽 聽 聽 聽If oDlg:nResult = 2
聽 聽 聽 聽 聽 聽nItem := 0
聽 聽 聽 聽EndIf
聽 聽EndIf
聽 聽// 13/07/2021

聽 聽// 13/07/2021
聽 聽If lKillOfont
聽 聽 聽 聽oFont:End()
聽 聽EndIf
聽 聽// 13/07/2021

RETURN nItem

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Capturar pulsaci贸n de tecla ESC en DIALOG
Posted: Sat Jul 17, 2021 09:56 PM

Muy bien

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Capturar pulsaci贸n de tecla ESC en DIALOG
Posted: Sun Jul 18, 2021 01:28 AM
Mira:

Code (fw): Select all Collapse
// \SAMPLES\MSGLIST1.PRG

#Include "FiveWin.ch"

FUNCTION Main()

   LOCAL aData := {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }

   LOCAL cTitle, nTop, nLeft, nBottom, nRight, cBtnTitle, cCampo

   oaMsgList( aData, cTitle, nTop, nLeft, nBottom, nRight, cBtnTitle, cCampo )

RETURN NIL

FUNCTION oaMsgList( aData, cTitle, nTop, nLeft, nBottom, nRight, cBtnTitle,  ;
                    cCampo )

   LOCAL x, nItem := 0, nAlt, nLarg := 0, oFont, oDlg, oLst, oBtnClose

   if aData == nil .or. len(aData) == 0

      MsgStop("Os par芒metros n茫o foram passados corretamente para o oaMsgList()","Aten莽茫o")

      RETURN nItem

   endif

   nAlt:=len( aData )

   for x=1 to nAlt

      nLarg:=max( nLarg, len( aData[x] ) )

   next

   // Para limitar a altura da janela.
   nAlt := iif( nAlt > 50, 50, nAlt )

   DEFAULT cTitle := "Selecione", nTop:=9, nLeft:=9, nBottom:=80+(nAlt*12), ;
           nRight := max( (len(cTitle)*12)+50, 50+(nLarg*12) ),             ;
           cBtnTitle := "&Confirme", cCampo := ""

   nItem := IIF( .NOT. Empty( cCampo ), aScan( aData, cCampo ), 1 )

   SetBalloon( .T. ) // Balloon shape required for tooltips
   SkinButtons()

   DEFINE FONT oFont NAME GetSysFont() SIZE 0,-8

   DEFINE DIALOG oDlg  FROM nTop,nLeft TO nBottom,nRight         ;
      TITLE cTitle FONT oFont                                    ;
      STYLE nOr( WS_POPUP, WS_CAPTION, WS_BORDER, WS_THICKFRAME, ;
                 WS_MAXIMIZEBOX) COLORS CLR_BLACK, CLR_WHITE     ;
      TRANSPARENT PIXEL

   @ 004,003 LISTBOX oLst VAR nItem ITEMS aData OF oDlg SIZE 100,100 Pixel

   oLst:bLDblClick := {|| oDlg:End() }

   @ 078,176 BUTTON oBtnClose PROMPT cBtnTitle DEFAULT SIZE 036,013 ;
      ACTION oDlg:End() Pixel CANCEL

   oDlg:bResized := {|| oLst:SetSize( oDlg:nWidth() - 27, oDlg:nHeight() - iif(LargeFonts(), 89, 79) ),;
                        oBtnClose:nTop  := oDlg:nHeight() - iif(LargeFonts(), 79, 69),;
                        oBtnClose:nLeft := oDlg:nWidth() - 94,;
                        oLst:Select(nItem), oDlg:Refresh() }

   ACTIVATE DIALOG oDlg CENTERED ON INIT ( Eval(oDlg:bResized) )

   oFont:End()

RETURN nItem

// Fin / End


Saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: Capturar pulsaci贸n de tecla ESC en DIALOG
Posted: Mon Jul 19, 2021 02:50 PM
Don't know if this is what you are looking for ..

Code (fw): Select all Collapse
ACTIVATE DIALOG oDlg  ;
            VALID(!GETKEYSTATE( 27 ))


Very simple code to trap or exclude the ESC Key

Rick Lipkin

Continue the discussion