Meu código rudimentar está assim:
Function login()
Local oDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 ), oTimer, oSAY1, oSAY5
Local snh := space(20)
local cRet :="OK"
Local oE5, cProc
private conexao
INIT DIALOG oDlg CLIPPER NOEXIT TITLE "Log in" AT 250,20 SIZE 250,200 FONT oFont
hwg_SetColorinFocus( oDlg,, 13172680 )
@ 15,20 SAY oSAY1 CAPTION "Digite a sua senha:" SIZE 260, 22
@ 15,65 GET oE5 VAR snh PASSWORD SIZE 150, 26 //Precisa do objeto GET oE5
@ 15,120 BUTTON "Entrar" SIZE 80, 32 ON CLICK {||oDlg:lResult:=.T.,hwg_EndDialog()}
@ 100,120 BUTTON "Encerrar" SIZE 90,30 ON CLICK {||oDlg:Close()}
ACTIVATE DIALOG oDlg
if lastkey()=27
cRet="Cancelou"
else
IF !ADOconecta( 3, 4 )
cRet="Não conectou"
Endif
cProc=conexao:execute("SELECT usuario FROM usuario WHERE senha='"+snh+"'")
if cProc:recordcount()=0
cProc:Close()
conexao:close()
@ 15,20 SAY oSAY1 CAPTION "Senha nao confere" SIZE 260, 22
inkey(3)
cRet ="Senha errada"
else
us=cProc:Fields("usuario"):Value
cProc:Close()
conexao:close()
endif
endif
Return cRet
Embora não esteja com uma tela muito agradável, mas está funcionando, exceto nessa questão de teclar enter para substituir o click no Ok, como eu gostaria.