Page 1 of 1

Existe mascara de GET que convierta a minuscula?

Posted: Wed Apr 06, 2016 1:15 am
by hidroxid
Buenas.

Ante todo disculpas si el tema es OFF TOPIC.

Existe mascara contraria a @! que permita que los datos ingresados se conviertan a minusculas automáticamente?

Como hay tantas funciones no documentadas en Harbour hago esta pregunta para no trabajar de mas :wink:

Gracias

Re: Existe mascara de GET que convierta a minuscula?

Posted: Wed Apr 06, 2016 5:09 am
by FranciscoA
Hola.
Desde código, lo desconozco. Nunca lo he usado.
Pero si usas editor de recursos PellesC, intentalo con Case Lower YES.
Saludos.

Re: Existe mascara de GET que convierta a minuscula?

Posted: Wed Apr 06, 2016 12:56 pm
by karinha
Yo desligo el Capslock al adentrar al modulo.

Code: Select all

#include "fivewin.ch"
*#include "Dll.ch"

*----------------------------------------------------------------------
* Vejam com funciona
*----------------------------------------------------------------------
* SETCAPSLOCK( .T. ou .F. )  = Liga e desliga o Capslock
* SETNUMLOCK( .T. ou .F. )   = Liga e desliga o NumLock
* SETSCROLLOCK( .T. ou .F. ) = Liga e desliga o ScrollLock
* SETINSERT( .T. ou .F. )    = Liga e desliga o Insert
*----------------------------------------------------------------------
* VERCAPSLOCK()  = Sem parametros retorna o estado do Capslock
* VERNUMLOCK()   = Sem parametros retorna o estado do NumLock
* VERSCROLLOCK() = Sem parametros retorna o estado do ScrollLock
* VERINSERT()    = Sem parametros retorna o estado do Insert
*----------------------------------------------------------------------

/*
*************
function MAIN
*************

? SETCAPSLOCK( .F. )
? "Desligando o CapsLock"
SETCAPSLOCK( .T. )
? "Ligando o CapsLock"
SETCAPSLOCK( .F. )
? "Desligando o CapsLock"
SETCAPSLOCK( .T. )
? "Ligando o CapsLock"
SETCAPSLOCK( .F. )
? "Desligando o CapsLock"

? "O Capslock esta' " + iif( VERCAPSLOCK(), "Ligado", "Desligado" )

SETNUMLOCK( .F. )
? "Desligando o NumLock"
SETNUMLOCK( .T. )
? "Ligando o NumLock"
SETNUMLOCK( .F. )
? "Desligando o NumLock"
SETNUMLOCK( .T. )
? "Ligando o NumLock"
SETNUMLOCK( .F. )
? "Desligando o NumLock"

? "O Numlock esta' " + iif( VERNUMLOCK(), "Ligado", "Desligado" )

SETSCROLLOCK( .F. )
? "Desligando o ScrollLock"
SETSCROLLOCK( .T. )
? "Ligando o ScrollLock"
SETSCROLLOCK( .F. )
? "Desligando o ScrollLock"
SETSCROLLOCK( .T. )
? "Ligando o ScrollLock"
SETSCROLLOCK( .F. )
? "Desligando o ScrollLock"

? "O ScrollLock esta' " + iif( VERSCROLLOCK(), "Ligado", "Desligado" )

SETINSERT( .T. )
? "Ligando o Insert"

SETINSERT( .F. )
? "Desligando o Insert"

? "O Insert esta' " + iif( VERINSERT(), "Ligado", "Desligado" )

return NIL
*/

*------------------------------------------------------------*
*            FUNCAO PARA ATIVAR A TECLA CAPSLOCK             *
*------------------------------------------------------------*

#pragma begindump

#define _WIN32_IE 0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400

#include <windows.h>
#include "hbapi.h"

HB_FUNC ( SETCAPSLOCK )
{
BYTE keyState[256];

GetKeyboardState((LPBYTE)&keyState);

if( (hb_parl(1) && !(keyState[VK_CAPITAL] & 0)) || (!hb_parl(1) && (keyState[VK_CAPITAL] & 1)) )
    {
      keybd_event( VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );
      keybd_event( VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
    }
}

#pragma enddump

*-----------------------------------------------------------*
*            FUNCAO PARA ATIVAR A TECLA NUMLOCK             *
*-----------------------------------------------------------*

#pragma begindump

#define _WIN32_IE 0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400

#include <windows.h>
#include "hbapi.h"

HB_FUNC ( SETNUMLOCK )
{
BYTE keyState[256];

GetKeyboardState((LPBYTE)&keyState);

if( (hb_parl(1) && !(keyState[VK_NUMLOCK] & 0)) || (!hb_parl(1) && (keyState[VK_NUMLOCK] & 1)) )
    {
      keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );
      keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
    }
}

#pragma enddump

*-----------------------------------------------------------*
*            FUNCAO PARA ATIVAR A TECLA SCROLLOCK           *
*-----------------------------------------------------------*

#pragma begindump

#define _WIN32_IE 0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400

#include <windows.h>
#include "hbapi.h"

HB_FUNC ( SETSCROLLOCK )
{
BYTE keyState[256];

GetKeyboardState((LPBYTE)&keyState);

if( (hb_parl(1) && !(keyState[VK_SCROLL] & 0)) || (!hb_parl(1) && (keyState[VK_SCROLL] & 1)) )
    {
      keybd_event( VK_SCROLL, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );
      keybd_event( VK_SCROLL, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
    }
}

#pragma enddump

*-----------------------------------------------------------*
*            FUNCAO PARA ATIVAR A TECLA SCROLLOCK           *
*-----------------------------------------------------------*

#pragma begindump

#define _WIN32_IE 0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400

#include <windows.h>
#include "hbapi.h"

HB_FUNC ( SETINSERT )
{
BYTE keyState[256];

GetKeyboardState((LPBYTE)&keyState);

if( (hb_parl(1) && !(keyState[VK_INSERT] & 0)) || (!hb_parl(1) && (keyState[VK_INSERT] & 1)) )
    {
      keybd_event( VK_INSERT, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );
      keybd_event( VK_INSERT, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
    }
}

#pragma enddump

#pragma begindump

#define _WIN32_IE 0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400

#include <windows.h>
#include "hbapi.h"

HB_FUNC ( VERCAPSLOCK )
{
BYTE keyState[256];

GetKeyboardState((LPBYTE)&keyState);

hb_retl( keyState[VK_CAPITAL] );
}

#pragma enddump

*-----------------------------------------------------------*
*            FUNCAO PARA VERIFICAR A TECLA NUMLOCK          *
*-----------------------------------------------------------*

#pragma begindump

#define _WIN32_IE 0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400

#include <windows.h>
#include "hbapi.h"

HB_FUNC ( VERNUMLOCK )
{
BYTE keyState[256];

GetKeyboardState((LPBYTE)&keyState);

hb_retl( keyState[VK_NUMLOCK] );
}

#pragma enddump

*-----------------------------------------------------------*
*          FUNCAO PARA VERIFICAR A TECLA SCROLLOCK          *
*-----------------------------------------------------------*

#pragma begindump

#define _WIN32_IE 0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400

#include <windows.h>
#include "hbapi.h"

HB_FUNC ( VERSCROLLOCK )
{
BYTE keyState[256];

GetKeyboardState((LPBYTE)&keyState);

hb_retl( keyState[VK_SCROLL] );
}

#pragma enddump

*-----------------------------------------------------------*
*          FUNCAO PARA VERIFICAR A TECLA SCROLLOCK          *
*-----------------------------------------------------------*

#pragma begindump

#define _WIN32_IE 0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400

#include <windows.h>
#include "hbapi.h"

HB_FUNC ( VERINSERT )
{
BYTE keyState[256];

GetKeyboardState((LPBYTE)&keyState);

hb_retl( keyState[VK_INSERT] );
}

#pragma enddumpa
 

Re: Existe mascara de GET que convierta a minuscula?

Posted: Wed Apr 06, 2016 1:15 pm
by hidroxid
Muchas gracias a los colegas que respondieron.

Interesante las soluciones, las evaluaré para tomar lo mejor de ellas.

Saludos

Re: Existe mascara de GET que convierta a minuscula?

Posted: Fri Apr 08, 2016 11:43 pm
by noe aburto
saludos.

Cuando algunos usuarios necios escriben en campos en minusculas siendo que deben capturar en mayusculas, para ignorar el picture '@!'
modifique las clases tget y mget para que cuando lo indique en alguno campos, este sea siempre en mayusculas. pero agregue el uso de ñÑ y acentos en las letras á é´í ó´ú

Si tu quieres en minusculas, solo usa en lugar del Upper() el Lower() en estas clases:
te expongo la clase tget (y lo mismo hice en el mget), verifica la variable que agregue: lkeyUpper, por ej.

Code: Select all

// get normal
oGET:=TGet():New(nROW,nCOL,..
oGET:lKeyUpper:=.t.

oGET:=TMultiGet():New(nROW,nCOL],..
oGET:lKeyUpper:=.t.
 
clase tget

Code: Select all

CLASS TGet FROM TControl

   DATA   oGet, oBtn, bAction
   DATA   bMin, bMax
   DATA   nPos
   DATA   lReadOnly, lPassword
   DATA   cError, cBmpName
   DATA   hHeap
   DATA   cPicture
   DATA   bPostKey
   DATA   lSpinner
   DATA   nOldClrPane // Old background color, if color changed with focus
   DATA   nClrTextDis, nClrPaneDis
   DATA   nBmpWidth
   DATA   lAdjustBtn // Adjust buutton get
   DATA   lBtnTransparent
   DATA   cCueText
   DATA   nTxtStyle
   DATA   lKeepFocus INIT .T. // keep the focus after pressing the ACTION button
   DATA   lKeyUpper

METHOD New( nRow, nCol, bSetGet, oWnd, nWidth, nHeight, cPict, bValid,;
            nClrFore, nClrBack, oFont, lDesign, oCursor, lPixel, cMsg,;
            lUpdate, bWhen, lCenter, lRight, bChanged, lReadOnly,;
            lPassword, lNoBorder, nHelpId, lSpinner,;
            bUp, bDown, bMin, bMax, bAction, cBmpName, cVarName,;
            cCueText ) CLASS TGet

   local cText := Space( 50 )

   DEFAULT nClrFore  := GetSysColor( COLOR_WINDOWTEXT ),;
           nClrBack  := GetSysColor( COLOR_WINDOW ),;
           oWnd      := GetWndDefault(),;
           nHeight   := If( oFont != nil, oFont:nHeight, 12 ),;
           lDesign   := .f., lPixel := .f., lUpdate := .f.,;
           lCenter   := .f., lRight := .f.,;
           lReadOnly := .f., lPassword := .f.,;
           lSpinner  := .f.,;
           nRow      := 0, nCol := 0, lNoBorder := .f.,;
           bSetGet   := bSETGET( cText )

   ::cCaption = If( cPict == nil, cValToChar( Eval( bSetGet ) ), ;
                    Transform( Eval( bSetGet ), cPict ) )

   if lSpinner
      nHeight := Max( 15, nHeight )
   endif

   ::nTop     = nRow * If( lPixel, 1, GET_CHARPIX_H )  //13
   ::nLeft    = nCol * If( lPixel, 1, GET_CHARPIX_W )  // 8
   ::nBottom  = ::nTop + nHeight - 1
   ::nRight   = ::nLeft + If( nWidth == nil, ( 1 + Len( ::cCaption ) ) * 3.5, ;
                                               nWidth - 1 ) + ;
                If( lSpinner, 20, 0 )
   ::oWnd      = oWnd
   ::nStyle    = nOR( WS_CHILD, WS_VISIBLE,;
                      ES_AUTOHSCROLL,;
                      If( ! lReadOnly, WS_TABSTOP, 0 ),;
                      If( lDesign, WS_CLIPSIBLINGS, 0 ),;
                      If( lSpinner, WS_VSCROLL, 0 ),;
                      If( lReadOnly, ES_READONLY, 0 ),;
                      If( lCenter, ES_CENTER, If( lRight, ES_RIGHT, ES_LEFT ) ) )
                   // If( lCenter .OR. lRight, ES_MULTILINE, 0 ),; Only needed for Win31

   #ifdef __CLIPPER__
      if ! lNoBorder
         ::nStyle = nOr( ::nStyle, WS_BORDER )
      endif
   #else
      if ! IsAppThemed()
         if ! lNoBorder
            ::nStyle = nOr( ::nStyle, WS_BORDER )
         endif
      else
         if ! lNoBorder
            ::nStyle = nOr( ::nStyle, If( oWnd:IsKindOf( "TDIALOG" ), WS_BORDER, 0 ) )
            ::nExStyle = WS_EX_CLIENTEDGE
         endif
      endif
   #endif

   ::nStyle    = If( lNoBorder, nAnd( ::nStyle, nNot( WS_BORDER ) ), ::nStyle )
   ::nId       = ::GetNewId()
   ::bSetGet   = bSetGet
   ::oGet      = FWGetNew( 20, 20, bSetGet, cVarName, cPict )
   ::bValid    = bValid
   ::lDrag     = lDesign
   ::lCaptured = .f.
   ::lPassword = lPassword
   ::oFont     = oFont
   ::oCursor   = oCursor
   ::cMsg      = cMsg
   ::lUpdate   = lUpdate
   ::bWhen     = bWhen
   ::bChange   = bChanged
   ::nPos      = 1  // 0   14/Aug/98
   ::lReadOnly = lReadOnly
   ::lFocused  = .f.
   ::nHelpId   = nHelpId
   ::cPicture  = cPict
   ::bPostKey  = { | x, y | y }
   ::lSpinner  = lSpinner
   ::hHeap     = 0
   ::bAction   = bAction
   ::cBmpName  = cBmpName
   ::cCueText  = cCueText
   ::nTxtStyle = nOR( ETO_CLIPPED, ETO_OPAQUE )

   ::SetColor( nClrFore, nClrBack )
   ::lAdjustBtn = .f.
   ::lBtnTransparent = .f.

   ::oGet:SetFocus()
   ::cCaption = ::oGet:Buffer
   ::oGet:KillFocus()

   ::nClrTextDis = nClrFore
   ::nClrPaneDis = ::nClrPane // nClrBack
   ::lKeyUpper   = .f.

   #ifndef __CLIPPER__
      if lPassword .and. oFont == nil
         DEFINE FONT ::oFont NAME "Arial" SIZE 0, -14 BOLD
      endif
   #endif

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

   DEFAULT cVarName := "oGet" + ::GetCtrlIndex()

   ::cVarName = cVarName

   if lDesign
      ::CheckDots()
   endif

   if lSpinner
      ::Spinner( bUp, bDown, bMin, bMax )
   endif

return Self

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

METHOD ReDefine( nId, bSetGet, oWnd, nHelpId, cPict, bValid, nClrFore,;
                 nClrBack, oFont, oCursor, cMsg, lUpdate, bWhen, bChanged,;
                 lReadOnly, lSpinner, bUp, bDown, bMin, bMax, bAction, cBmpName,;
                 cVarName, cCueText ) CLASS TGet

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


   if Eval( bSetGet ) == nil
      Eval( bSetGet, Space( 30 ) )
   endif

   ::nId       = nId
   ::oWnd      = oWnd
   ::nHelpId   = nHelpId
   ::bSetGet   = bSetGet
   ::oGet      = FWGetNew( 20, 20, bSetGet, cVarName, cPict )
   ::bValid    = bValid
   ::lDrag     = .f.
   ::lCaptured = .f.
   ::lPassword = .f.
   ::oFont     = oFont
   ::oCursor   = oCursor
   ::cMsg      = cMsg
   ::lUpdate   = lUpdate
   ::bWhen     = bWhen
   ::bChange   = bChanged
   ::nPos      =  1  // 0   14/Aug/98
   ::lReadOnly = lReadOnly
   ::lFocused  = .f.
   ::cPicture  = cPict
   ::bPostKey  = { | x, y | y }
   ::lSpinner  = lSpinner
   ::hHeap     = 0
   ::bAction   = bAction
   ::cBmpName  = cBmpName
   ::nClrTextDis = nClrFore
   ::nClrPaneDis = nClrBack
   ::lKeyUpper = .f.
   ::cCueText  = cCueText
   ::nTxtStyle = nOR( ETO_CLIPPED, ETO_OPAQUE )

   ::SetColor( nClrFore, nClrBack )
   ::lAdjustBtn = .f.
   ::lBtnTransparent = .f.

   if lSpinner
      ::Spinner( bUp, bDown, bMin, bMax )
   endif

   oWnd:DefControl( Self )

return Self

METHOD KeyChar( nKey, nFlags ) CLASS TGet

   local nHi, nLo
   local lAccept
   local bKeyAction := SetKey( nKey )
   local nDefButton

   if ::bKeyChar != nil
      if Eval( ::bKeyChar, nKey, nFlags, Self ) == 0
         return 0
      endif
   endif

   if nKey == VK_ESCAPE  // avoids a beep!
      ::oWnd:KeyChar( nKey, nFlags )
      return 1
   endif

   #ifndef __XPP__
   if ! Empty( ::cPicture ) .and. '@!' $ ::cPicture
      nKey = Asc( CharUpper( nKey ) )
   elseif ::lKeyUpper
      // acento agudo español
      do case
      case nKey == Chr(160) // á
         nKey = Chr(181)    // Á
      case nKey == Chr(130) // é
         nKey = Chr(144)    // É
      case nKey == Chr(161) // í
         nKey = Chr(214)    // Í
      case nKey == Chr(162) // ó
         nKey = Chr(224)    // Ó
      case nKey == Chr(163) // ú
         nKey = Chr(233)    // Ú
      // letra ñ,N
      case nKey == Chr(164) // ñ
         nKey = Chr(165)    // Ñ
      otherwise
         nKey = Asc( CharUpper( nKey ) )
      endcase
   endif
   #endif

   if bKeyAction != nil .and. lAnd( nFlags, 16777216 ) // function Key
      Eval( bKeyAction, ProcName( 4 ), ProcLine( 4 ), Self )
      return 0         // Already processed, API do nothing
   endif

   if ::lReadOnly
      if nKey == VK_ESCAPE
         ::oWnd:End()
      endif
      return 0
   endif

   do case
      case nKey == VK_BACK       // Already processed at KeyDown
           return 0

      // case nKey == VK_ESCAPE
      //     return 0

      case nKey == VK_TAB .and. GetKeyState( VK_SHIFT )
           if ::bChange != nil .and. ( ::oGet:Changed .or. ::oGet:UnTransform() != ::oGet:Original )
              lAccept = Eval( ::bChange, nKey, nFlags, Self )
              if ValType( lAccept ) == "L" .and. lAccept
                 if ::oWnd:IsKindOf( "TCOMBOBOX" )
                    ::oWnd:oWnd:GoPrevCtrl( ::hWnd )
                 else
                    ::oWnd:GoPrevCtrl( ::hWnd )
                 endif
              endif
           else
              if ::oWnd:IsKindOf( "TCOMBOBOX" )
                 ::oWnd:oWnd:GoPrevCtrl( ::hWnd )
              else
                 ::oWnd:GoPrevCtrl( ::hWnd )
              endif
           endif
           return 0

      case nKey == VK_TAB .or. nKey == VK_RETURN
           if ::bChange != nil .and. ( ::oGet:Changed .or. ::oGet:UnTransform() != ::oGet:Original )
              lAccept = Eval( ::bChange, nKey, nFlags, Self )
              if ValType( lAccept ) == "L"
                 if lAccept
                    ::oWnd:GoNextCtrl( ::hWnd )
                 endif
              else
                 ::oWnd:GoNextCtrl( ::hWnd )
              endif
           else
              ::oWnd:GoNextCtrl( ::hWnd )
           endif

           #ifndef __CLIPPER__
               if nKey == VK_RETURN  // Execute DEFPUSHBUTTON Action
                  ::Super:KeyChar( nKey, nFlags )
               endif
           #endif

           return 0

      case nKey >= 32 .and. nKey < 256
           if ::oGet:buffer == nil
              return 0
           endif
           if ::nPos > Len( ::oGet:buffer )
              return 0
           endif

           ::GetSelPos( @nLo, @nHi )

           // Delete selection
           if nHi != nLo
              ::GetDelSel( nLo, nHi )
              ::EditUpdate()
           endif
           if ::oGet:Type == "N" .and. ;
              ( Chr( nKey ) == "." .or. Chr( nKey ) == "," )
              if ::oGet:Clear()
              #ifndef __XHARBOUR__
                 ::oGet:DelEnd()
              #endif
              endif
              ::oGet:ToDecPos()
           else
              if Set( _SET_INSERT )             // many thanks to HMP
                 ::oGet:Insert( Chr( nKey ) )
              else
                 ::oGet:Overstrike( Chr( nKey ) )
              end
           endif
           if ::oGet:Rejected
              if Set( _SET_BELL )
                 MsgBeep()
              endif
           endif
           ::EditUpdate()
           if nHi+1 == len( ::oGet:buffer )
              ::SetPos( nHi+2 )
           endif
           if ::oGet:TypeOut
              if ! Set( _SET_CONFIRM )
                 ::oWnd:nLastKey = VK_RETURN
                 ::oWnd:GoNextCtrl( ::hWnd )
              else
                 if Set( _SET_BELL )
                    MsgBeep()
                 endif
              endif
           endif
           if ::bChange != nil
              lAccept = Eval( ::bChange, nKey, nFlags, Self )
              if ValType( lAccept ) == "L" .and. ! lAccept
                 return 0
              endif
           endif
           Eval( ::bPostKey, Self, ::oGet:Buffer )
           if ::oBtn != nil
              ::oBtn:Refresh()
           endif

      otherwise
           return ::Super:KeyChar( nKey, nFlags )
   endcase

return 0
 

Re: Existe mascara de GET que convierta a minuscula?

Posted: Sat Apr 09, 2016 7:36 pm
by joseluisysturiz
FranciscoA wrote:Hola.
Desde código, lo desconozco. Nunca lo he usado.
Pero si usas editor de recursos PellesC, intentalo con Case Lower YES.
Saludos.
Tan facil como lo expone Francisco, asi tambien lo hago...sin hechar nada de codigo, saludos... :shock: