Página 1 de 1

Usando pushbutton

Enviado: 12 Mai 2023 11:43
por JoséQuintas

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
Como é controle GUI, é muita informação.
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()
o WITH OBJECT deixa o fonte mais limpo, e criar o array reduz muito mais fonte do que se criasse um a um.
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.
wvg (1).png
E se quiser imagem, texto + imagem, é só colocar.

Eu uso uma rotina nesse estilo, e pego o ícone de acordo com o texto.

Usando pushbutton

Enviado: 17 Jul 2023 08:48
por microvolution
muito bom.
JoséQuintas escreveu:05    LOCAL nOpc := 1, aItem
06    LOCAL aBtnList := { ;
07       { "Inclui", "I", Nil }, ;
08       { "Altera", "A", Nil }, ;
09       { "Exclui", "E", Nil }, ;
10       { "Lista",  "L", Nil }, ;
11       { "Hide", "H", Nil }, ;
12       { "Show", "S", Nil } }
13  
14    SetMode(33,100)
15    SetColor( "W/B" )
16    CLS
17    CriarButtons( @aBtnList )