Usando pushbutton
Enviado: 12 Mai 2023 11:43
Código: Selecionar todos
#include "inkey.ch"
PROCEDURE Main
LOCAL nOpc := 1, aItem
LOCAL aBtnList := { ;
{ "Inclui", "I", Nil }, ;
{ "Altera", "A", Nil }, ;
{ "Exclui", "E", Nil }, ;
{ "Lista", "L", Nil }, ;
{ "Hide", "H", Nil }, ;
{ "Show", "S", Nil } }
SetMode(33,100)
SetColor( "W/B" )
CLS
CriarButtons( @aBtnList )
DO WHILE .T.
CLS
@ 7, 0 SAY ""
FOR EACH aItem IN aBtnList
@ Row() + 1, 10 PROMPT aItem[ 1 ]
NEXT
MENU TO nOpc
IF LastKey() == K_ESC .OR. nOpc == 0
EXIT
ENDIF
Alert( "Opção escolhida " + aBtnList[ nOpc, 1 ] )
DO CASE
CASE nOpc == 5; AEval( aBtnList, { | e | e[3]:Hide() } )
CASE nOpc == 6; AEval( aBtnList, { | e | e[3]:Show() } )
ENDCASE
ENDDO
RETURN
FUNCTION CriarButtons( aBtnList )
LOCAL nCol := 1, aItem
FOR EACH aItem IN aBtnList
WITH OBJECT aItem[ 3 ] := wvgPushbutton():New()
:PointerFocus := .F.
:Create( ,, { -1, -nCol }, { -3, -5 },,,.F. )
:Activate := { || hb_Keyput( Asc( aItem[ 2 ] ) ) }
:SetCaption( aItem[ 1 ] )
:Show()
ENDWITH
nCol += 5
NEXT
RETURN Nil
PROCEDURE HB_GTSYS
REQUEST HB_GT_WVG_DEFAULT
RETURN
Pra cada pushbutton precisa disto
Código: Selecionar todos
oBtn1 := wvgPushbutton():New()
oBtn1:PointerFocus := .F.
oBtn1:Create( ,, { -1, -nCol }, { -3, -5 },,,.F. )
oBtn1:Activate := { || hb_Keyput( Asc( aItem[ 2 ] ) ) }
oBtn1:SetCaption( aItem[ 1 ] )
oBtn1:Show()
Nesse caso o pushbutton vai fazer KEYBOARD, e se o fonte já trata o teclado, não precisa nenhum fonte adicional.
Estou usando o array pra mostrar as opções do PROMPT e também pra preencher os buttons, por isso o array está no fonte principal.
Pra outras situações, nem esse array precisaria estar no fonte.
Olhando o fonte principal, ele nem sabe que GTWVG existe.
E meus fontes são nesse estilo: os fontes nem sabem que GTWVG existe.
O mesmo estilo é válido pra HWGUI ou minigui, mas no caso delas, o fonte sempre sabe que HWGUI ou minigui existem.
E se quiser imagem, texto + imagem, é só colocar.
Eu uso uma rotina nesse estilo, e pego o ícone de acordo com o texto.