Jump to content
Fivewin Brasil

nTec1 := Inkey(0) - ROSOLVIDO de uma forma muito simples!


evertonlb

Recommended Posts

Pessoal.. to refazendo um sistema em Clipper, em FW.

refazendo porque estou tirando coisas que eram desnecessárias, arrumando coisas que precisava e colocando outras que não tinha.

Mas no software em Clipper em tenho um menu de relatórios de conferencia e auditoria...

Este menu se encontra numa função, e dentro desta função ainda tem uma senha, para só então liberar o acesso ao menu..

Até ofereci outra opção, mas os cliente querem que seja exatamente igual ao do Clipper...

o código em Clipper é o seguinte.

local cTec1 := inkey(0)
local cTec2 := inkey(0)
local cTec3 := inkey(0)
local cTec4 := inkey(0)

*
local cQual := "8789"
*
if upper( chr( cTec1 ) ) + upper( chr( cTec2 ) ) + upper( chr( cTec3 ) ) +;
   upper( chr( cTec4 ) ) # str( cQual, 4, 0 )
   return NIL
else......


Fiz uma pesquisa no forum e encontrei alguns tópicos, tentei colocar eles em prática, porem sem sucesso...

Como faço para colocar isso dentro de uma função em FW?

Att.

Everton

Link to comment
Share on other sites

Pois é Alessandro, eu usei o "agora terá que ser assim" coloquei o password para aparecer os asteriscos e tals...

mas o cara ficou com aquele olhar de "poxa vida.. não gostei nada disso!"

Então, acho que deve haver alguma forma de fazer como no clipper.

essa "geringonça", não mostra nada Kapiaba...

entra na função e fica esperando 4 teclas serem digitadas...

depois compara as 4 digitadas com a senha que o cara definiu...

Link to comment
Share on other sites

eu faria assim:



// Small sample showing how to request a password previous to main window

#include "FiveWin.ch"

static oWnd

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

function Main()

if lGetPassword()

DEFINE WINDOW oWnd TITLE "Main"

ACTIVATE WINDOW oWnd ;
VALID MsgYesNo( "Want to end ?" )
endif

return nil

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

function lGetPassword()

local oDlg, oGet, oFont
local cPassword := "8789" // := Space( 10 ) // Senha
local nTries := 0
local lGo := .f.

DEFINE FONT oFont NAME "Tahoma" SIZE 0, -12

DEFINE DIALOG oDlg ;
FROM 5, 5 TO 20, 50 ;
TITLE "Please Identify" ;
FONT oFont

@ 1, 2 SAY "Write FiveWin to go ahead..." OF oDlg
@ 2, 2 GET oGet VAR cPassword OF oDlg PASSWORD ;
VALID VALIDA_SENHA( oGet, cPassword )

@ 5, 5 BUTTON "&Continue" OF oDlg ;
ACTION ( nTries++,;
lGo := Upper( AllTrim( cPassword ) ) == "FIVEWIN",;
If( nTries > 3 .or. lGo, oDlg:End(),;
( MsgAlert( "Wrong password!" ), oGet:SetFocus() ) ) )

ACTIVATE DIALOG oDlg CENTERED

return lGo

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

FUNCTION VALIDA_SENHA( oGet, cPassword )

local cTec1 := "8" //inkey(0)
local cTec2 := "7" //inkey(0)
local cTec3 := "8" //inkey(0)
local cTec4 := "9" //inkey(0)
local lRet
*
//local cQual := "8789" //-> cPassword
*
local cQual := ALLTRIM( cPassword )

// ? CHR(cTec1) + CHR(cTec2) + CHR(cTec3) + CHR(cTec4), cQual

if cTec1 + cTec2 + cTec3 + cTec4 != cQual

? "Hey Jumento a senha esta errada! ", "Verifique" /// kkkkkkkkkkkkkkk

lRet := .F.

else

? "Hay Inteligencia a senha esta Correta! ", "Parabens!!"

lRet := .T.

ENDIF

RETURN( lRet )


Link to comment
Share on other sites

Melhorando para voce entender melhor de fivewin...



// Small sample showing how to request a password previous to main window

#include "FiveWin.ch"

static oWnd

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

function Main()

if lGetPassword()

DEFINE WINDOW oWnd TITLE "Main"

ACTIVATE WINDOW oWnd ;
VALID MsgYesNo( "Want to end ?" )
endif

return nil

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

function lGetPassword()

local oDlg, oGet, oFont
local cPassword := "8789" // := Space( 10 ) // Senha
local nTries := 0
local lGo := .f.

DEFINE FONT oFont NAME "Tahoma" SIZE 0, -12

DEFINE DIALOG oDlg ;
FROM 5, 5 TO 20, 50 ;
TITLE "Please Identify" ;
FONT oFont

@ 1, 2 SAY "Write FiveWin to go ahead..." OF oDlg
@ 2, 2 GET oGet VAR cPassword OF oDlg PASSWORD ;
VALID VALIDA_SENHA( oGet, cPassword )

@ 5, 5 BUTTON "&Continue" OF oDlg ;
ACTION ( nTries++,;
lGo := Upper( AllTrim( cPassword ) ) == "8789",;
If( nTries > 3 .or. lGo, oDlg:End(),;
( MsgAlert( "Wrong password!" ), oGet:SetFocus() ) ) )

ACTIVATE DIALOG oDlg CENTERED

return lGo

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

FUNCTION VALIDA_SENHA( oGet, cPassword )

local cTec1 := "8" //inkey(0)
local cTec2 := "7" //inkey(0)
local cTec3 := "8" //inkey(0)
local cTec4 := "9" //inkey(0)
local lRet
*
//local cQual := "8789" //-> cPassword
*
local cQual := ALLTRIM( cPassword )

// ? CHR(cTec1) + CHR(cTec2) + CHR(cTec3) + CHR(cTec4), cQual

if cTec1 + cTec2 + cTec3 + cTec4 != cQual

? "Hey Jumento a senha esta errada! ", "Verifique" /// kkkkkkkkkkkkkkk

cQual := space(4)

oGet:VarPut( cQual )
oGet:Refresh()

lRet := .F.

else

? "Hay Inteligencia a senha esta Correta! ", "Parabens!!"

lRet := .T.

ENDIF

RETURN( lRet )


Link to comment
Share on other sites

Valeu cara... entendi.

Mas mostrar um get e pedir a senha e verificar se a senha ta certa.. moleza..

não queria era mostrar o get... Ou será que não entendi teu código e o get não esta sendo mostrado e por isso eu sou, talvez, o tal jumento que

se refere nas mensagens?!?!

Tipo:

do while ii < 5

O sistema fica parado esperando uma tecla ser digitada;

sem ter um get na tela,;

sem bip,;

sem nenhuma coisa.

cTec&ii. := tecla digitada

ii ++

enddo

*

if cTec1 + cTec2 + cTec3 + cTec4 == strzero( day(date()) + Month(date()) + year(date() ), 4, 0 )

Msginfo( "Parabéns jumento, acertou a senha!" )

AbreMenu()

else

MsgInfo( "Ei seu inteligente... errou feio!" )

CaiForaChato()

endif

Link to comment
Share on other sites

KKKKKKK, Não, o jumento, era somente uma brincadeira, para quebrar o gelo, não se ofenda, porfa!


Fivewin é fácil para caramba, mas, é necessário estudar. Graças à Deus, temos este forum, que o Gilmer, aos trancos e barrancos, mantém a duras penas, já que o pessoal não compra as últimas versões do Five.


Veja se agora voce entende: É apenas uma questão de aplicar a COR certa no GET e sem BORDA, que ele "some"




// Small sample showing how to request a password previous to main window

#include "FiveWin.ch"

#Define COLOR_WINDOW 315

static oWnd, lLigaBtnSenha := .F.

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

function Main()

if lGetPassword()

DEFINE WINDOW oWnd TITLE "Main"

ACTIVATE WINDOW oWnd ;
VALID MsgYesNo( "Want to end ?" )
endif

return nil

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

function lGetPassword()

local oDlg, oGet, oFont
local cPassword := Space( 4 ) // Senha invisivel e o get idem
local nTries := 0
local lGo := .f.

DEFINE FONT oFont NAME "Tahoma" SIZE 0, -12

// Veja se entende agora... Facil para kralyo... kkkkkkkkkkkkkkkk

DEFINE DIALOG oDlg FROM 5, 5 TO 20, 50 ;
TITLE "Digite a Senha Invisivel - Veja se Entende Agora" ;
FONT oFont

@ 1, 2 SAY "Digite a Senha Invisivel no Cursor Piscante: " OF oDlg

Set( _SET_INSERT, ! Set( _SET_INSERT ) )

@ 3, 2 GET oGet VAR cPassword OF oDlg PASSWORD NO BORDER ; // Sem borda
VALID VALIDA_SENHA( oGet, cPassword ) ;
COLORS COLOR_WINDOW // aqui voce usa uma cor que "suma" com o GET.
// COLOR_WINDOW Ou de sua preferencia.

@ 5, 5 BUTTON "&Continue" OF oDlg ;
ACTION ( nTries++,;
lGo := Upper( AllTrim( cPassword ) ) == "8789",;
If( nTries > 3 .or. lGo, oDlg:End(),;
( MsgAlert( "Wrong password!" ), oGet:SetFocus() ) ) )

@ 5, 15 BUTTON "&Saida" OF oDlg ;
ACTION( oDlg:End() ) CANCEL UPDATE

ACTIVATE DIALOG oDlg CENTERED

Set( _SET_INSERT, ! Set( _SET_INSERT ) )

oFont:End()

lLigaBtnSenha := .F. // necessitaria + 1 Get no dialogo.

return lGo

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

FUNCTION VALIDA_SENHA( oGet, cPassword )

local cTec1 := "8" //inkey(0)
local cTec2 := "7" //inkey(0)
local cTec3 := "8" //inkey(0)
local cTec4 := "9" //inkey(0)
local lRet
*
//local cQual := "8789" //-> cPassword
*
local cQual := ALLTRIM( cPassword )

IF EMPTY( cPassword )

MsgStop( "Digite uma Senha Valida", "Senha Invalida" )

RETURN( .F. )

ENDIF

// aqui, controle como achar melhor...
if UPPER( CHR( cTec1 ) ) + UPPER( CHR( cTec2 ) ) + ;
UPPER( CHR( cTec3 ) ) + UPPER( CHR( cTec4 ) ) != UPPER( cQual )

? "Ooops a senha esta errada! ", "Verifique" /// kkkkkkkkkkkkkkk

cQual := space(4)

oGet:VarPut( cQual )
oGet:Refresh()

lLigaBtnSenha := .F.

lRet := .F.

else

? "A senha esta Correta! ", "Parabens!!"

lLigaBtnSenha := .T.

lRet := .T.

ENDIF

RETURN( lRet )
// FIM DO PROGRAMA


Link to comment
Share on other sites

hahahaha.. não seja disfarçado rapaz!!!

Esse negócio de jumento sei que foi só pra descontrair... faço muito disso tambem!!! hahahahah

mas como moro em SC, aqui se usa muito o "tongo"... hahahahaha

Cara, vou mudar um pouco a cabeça do cliente... é muita crise por causa de uma senha...

mas isso me fez pensar..

Tem uma maneira de parar a execução do software? Tipo o inkey() do Clipper?

Att.

Everton

Link to comment
Share on other sites

Deixando mais invisivel ainda, caso alguem precise no futuro.



// Small sample showing how to request a password previous to main window

#include "FiveWin.ch"

#Define COLOR_WINDOW 315
#Define CLR_DISABLE RGB( 255, 255, 217 )

static oWnd, lLigaBtnSenha := .F.

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

function Main()

if lGetPassword()

DEFINE WINDOW oWnd TITLE "Main"

ACTIVATE WINDOW oWnd ;
VALID MsgYesNo( "Want to end ?" )
endif

return nil

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

function lGetPassword()

local oDlg, oGet, oFont
local cPassword := Space( 4 ) // Senha invisivel e o get idem
local nTries := 0
local lGo := .f.

// SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )
SetDlgGradient( { { 1, CLR_WHITE, RGB(255,251,225) } } )

DEFINE FONT oFont NAME "Tahoma" SIZE 0, -12

DEFINE DIALOG oDlg FROM 5, 5 TO 20, 50 ;
TITLE "Digite a Senha Invisivel - Veja se Entende Agora" ;
FONT oFont COLOR CLR_BLACK, CLR_WHITE TRANSPARENT

@ 1, 2 SAY "Digite a Senha Invisivel no Cursor Piscante: " OF oDlg

Set( _SET_INSERT, ! Set( _SET_INSERT ) )

@ 3, 2 GET oGet VAR cPassword OF oDlg PASSWORD NO BORDER ; // Sem borda
VALID VALIDA_SENHA( oGet, cPassword ) FONT oFont ;
COLORS CLR_DISABLE // aqui voce usa uma cor que "suma" com o GET.

@ 5, 5 BUTTON "&Continue" OF oDlg ;
ACTION ( nTries++,;
lGo := Upper( AllTrim( cPassword ) ) == "8789",;
If( nTries > 3 .or. lGo, oDlg:End(),;
( MsgAlert( "Wrong password!" ), oGet:SetFocus() ) ) )

@ 5, 15 BUTTON "&Saida" OF oDlg ;
ACTION( oDlg:End() ) CANCEL UPDATE

ACTIVATE DIALOG oDlg CENTERED

Set( _SET_INSERT, ! Set( _SET_INSERT ) )

oFont:End()

// lLigaBtnSenha := .F. // necessitaria + 1 Get no dialogo.

return lGo

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

FUNCTION VALIDA_SENHA( oGet, cPassword )

local cTec1 := "8" //inkey(0)
local cTec2 := "7" //inkey(0)
local cTec3 := "8" //inkey(0)
local cTec4 := "9" //inkey(0)
local lRet
*
//local cQual := "8789" //-> cPassword
*
local cQual := ALLTRIM( cPassword )

IF EMPTY( cPassword )

MsgStop( "Digite uma Senha Valida", "Senha Invalida" )

RETURN( .F. )

ENDIF

// aqui, controle como achar melhor...
if UPPER( CHR( cTec1 ) ) + UPPER( CHR( cTec2 ) ) + ;
UPPER( CHR( cTec3 ) ) + UPPER( CHR( cTec4 ) ) != UPPER( cQual )

MsgStop( "Ooops a senha esta errada! ", "Verifique" )

cQual := space(4)

oGet:VarPut( cQual )
oGet:Refresh()

//lLigaBtnSenha := .F.

lRet := .F.

else

MsgInfo( "A senha esta Correta! ", "Parabens!!" )

//lLigaBtnSenha := .T.

lRet := .T.

ENDIF

RETURN( lRet )

// FIM DO PROGRAMA


Link to comment
Share on other sites

Bom pessoal.. A minha tentativa era ter captar as teclas digitadas e trata-las para ver se coincidiam com a senha..

mas uma coisa absolutamente invisível.. sem get, sem beep, sem tremelique...

no final das contas, apesar de todas as ajudar do Kapiaba, ainda assim não era beeemmmmm isso que eu esperava...

então fiz uma coisa que deu absolutamente certo... usei a ideia do Kapiaba, criando uma Dialog, e dentro dela um get

só que como trabalho com @, mandei criar esta DIALOG com valores negativos... tipo:

Define DIALOG oForm_AcsRem TITLE "" style 2;
FROM -180, -166 to -10, -35 PIXEL COLOR 0, 15790320
cara.. deu certinho... o DIALOG fica invisível porque fica numa região que não tem como aparecer... a partir disso
trato o lance da senha normal... pois dentro deste DIALOG "invisível" tem um get.. e ai brother.. uso o nkey pra ver o que o cara digitou...
ficou loco o baguio!
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...