entender como se cria um botão, mas durante a execução, quando chega nessa linha:
oButton:Create( , , { -nRow, -nCol }, { -2, -7 } ), // se comentar essa linha, executa normalmente, mas não cria os botões.
da mensagem: test.exe parou de funcionar
Harbour 3.2.0dev (console)
LOCAL cResp
SetMode( 28, 80 )
SetColor( "W/B" )
CLS
DO WHILE .T.
cResp := Mens( 22, 3, { "GGrava", "DDesiste", "SSair" } )
@ 10, 5 SAY "Opcao escolhida " + cResp
IF cResp == "S"
EXIT
ENDIF
ENDDO
RETURN
FUNCTION Mens( nRow, nCol, aLstOpcao )
LOCAL oButton, aLstButton := {}, cOpcao, nKey, lFound
FOR EACH cOpcao IN aLstOpcao // faz pra cada opção no array
oButton := wvgPushButton():New()
oButton:PointerFocus := .F.
oButton:Border := .T.
oButton:Caption := Substr( cOpcao, 2 ) // sem a primeira letra
oButton:TooltipText := Substr( cOpcao, 2 ) // sem a primeira letra
oButton:Activate := BuildBlock( Left( cOpcao, 1 ) ) // somente primeira letra
oButton:Create( , , { -nRow, -nCol }, { -2, -7 } ) [b]<--- Erro nessa linha [/b]
AAdd( aLstButton, oButton ) // adiciona o botão no array de botões
nCol += 12
NEXT
nKey := 0
DO WHILE nKey == 0
nKey := Inkey(0)
lFound := .F.
FOR EACH cOpcao IN aLstOpcao // pra verificar se a letra digitada está na lista
IF Upper( Chr( nKey ) ) == Left( cOpcao, 1 )
nKey := Asc( Left( cOpcao, 1 ) )
lFound := .T.
EXIT
ENDIF
NEXT
IF .NOT. lFound // se não está na lista, continua no loop
nKey := 0
ENDIF
ENDDO
FOR EACH oButton IN aLstButton // se já respondeu a pergunta, não precisa mais dos botões, destrói cada botão do array
oButton:Destroy()
NEXT
RETURN Chr( nKey )
STATIC FUNCTION BuildBlock( cLetra )
RETURN { || hb_KeyPut( cLetra ) }
teste.hbp
-otest
#-inc
-compr=yes
-quiet
-lxhb
-lhbwin
-lhbct
#-gui
-prgflag=-b
#-strip
#-compr
#-st
-gtwvg
test.prg