Página 2 de 2
GTWVG - Tamanho da fonte na função wvt_DrawButton()
Enviado: 03 Mai 2023 20:25
por JoséQuintas
Voltando um pouco atrás:
Do jeito que usa, wvt_paint faz todo trabalho, e pode ficar lenta pra atualizar, porque vai sempre desenhar tudo.
Não se trata nem exatamente do desenho, mas do que envolve fazer cada desenho, um por vez.
Se isso acontecer, vai ter que pensar em alternativas.
Mesmo os outros controles, também tem macetes.
Por exemplo, criar não visíveis, e só mostrar tudo no final, mas não é seu caso este.
É por isso que o windows divide em janelas, pra poder atualizar cada pedaço separado, e não ficar lento. Poder atualizar até mais de um pedaço ao mesmo tempo.
Essa rotina em C ajuda, não porque está em C, mas porque faz tudo de uma vez, é algo do tipo:
Em prg vai ser preparar,fazer,terminar, preparar,fazer,terminar,preparar,fazer,terminar
Em C é preparar, fazer, fazer, fazer, terminar
GTWVG - Tamanho da fonte na função wvt_DrawButton()
Enviado: 03 Mai 2023 20:37
por JoséQuintas
Jairo Maia escreveu:Quanto a trabalhar com wvgPushButton(), não vou não. Não gostei nada dele e ele não se enquadra na minha forma de trabalho, aliás, achei "um saco" esse recurso. PS: Opinião pessoal, nada contra quem se adaptou bem com ele.
De repente sentiu falta do que alterei nele.
Ou se baseou nos exemplos da gtwvg, se é que tem.
Mas também fica relacionado com o modo de uso, um aplicativo raramente é igual ao outro na forma de funcionamento.
Dá pra deixar muito mais fácil de usar do que wvt_DrawButton.
Nem precisa saber que o mouse existe, ou que o button existe.
GTWVG - Tamanho da fonte na função wvt_DrawButton()
Enviado: 03 Mai 2023 20:45
por JoséQuintas
Consegue montar um exemplo, simples ou não simples, com wvt_DrawButton, pra mostrar um equivalente com pushbutton ?
Pode ser que eu mostre uma forma que não tinha usado antes.
GTWVG - Tamanho da fonte na função wvt_DrawButton()
Enviado: 03 Mai 2023 21:11
por JoséQuintas
Fui olhar o exemplo da gtwvg, até tem draw_button(), mas só desenha e mais nada.
GTWVG - Tamanho da fonte na função wvt_DrawButton()
Enviado: 04 Mai 2023 18:42
por Jairo Maia
JoséQuintas escreveu:Consegue montar um exemplo, simples ou não simples, com wvt_DrawButton
Ok, mas não vou dar prazo, ok? Assim que puder monto e posto aqui.
GTWVG - Tamanho da fonte na função wvt_DrawButton()
Enviado: 05 Mai 2023 09:49
por JoséQuintas
Só pra adiantar, pelo que entendi do wvt_DrawButton:
wvt_DrawButton
Código: Selecionar todos
AAdd( aBlocks, wvt_DrawButton( ... ) )
AAdd( aBlocks, wvt_DrawButton( ... ) )
AAdd( aBlocks, wvt_DrawButton( ... ) )
SetBlocks( aBlocks )
DO WHILE .T.
IF nKey == K_MOUSEDOWN
IF MRow() >= 1 .AND. MROW() <= 3 .AND. MCol() >= 1 .AND. mCol() >= 2
nKey := K_F2
EXIT
ENDIF
IF MRow() >= 1 .AND. MROW() <= 3 .AND. MCol() >= 1 .AND. mCol() >= 2
nKey := K_F3
EXIT
ENDIF
IF MRow() >= 1 .AND. MROW() <= 3 .AND. MCol() >= 1 .AND. mCol() >= 2
nKey := K_F4
EXIT
ENDIF
ENDIF
ENDDO
DO CASE
CASE nKey == K_F2; // rotina
CASE nKey == K_F3; // rotina
CASE nKey == K_F4; // rotina
ENDCASE
SetBlocks( {} )
wvgpushbutton (usando rotina intermediária)
Código: Selecionar todos
aButton[1] := DrawWvgButton( ..... { || hb_Keyput( K_F2 ) } )
aButton[2] := DrawWvgButton( ..... { || hb_Keyput( K_F3 ) } )
aButton[3] := DrawWvgButton( ..... { || hb_Keyput( K_F4 ) } )
DO WHILE .T.
nKey := Inkey(0)
IF nKey == K_F2 .OR. nKey == K_F3 .OR. nKey == K_F4
EXIT
ENDIF
ENDDO
DO CASE
CASE nKey == K_F2; // rotina
CASE nKey == K_F3; // rotina
CASE nKey == K_F4; // rotina
ENDCASE
aButton[1]:Destroy()
aButton[2];Destroy()
aButton[3]:Destroy()
Comparando os dois fontes, o fonte do wvgpushbutton nem sabe que o button existe.
Lógico, na troca de telas pode ser que precise oButton:Hide() e oButton:Show()
Mas isso não é trabalho extra, comparado que também tem que ficar mexendo no array de wvt_Paint()
Hide() e Show() deixa invisível ou visível, Destroy() joga fora.
Também pode usar EVal( aButtonList, { | e | e:Destroy() } ) ao invés de fazer um por um, tanto faz.
Aqui criei uma classe oFrm, essa classe tem um array com os buttons, e centralizo as tranqueiras nela, assim comando tudo de uma vez, e acaba sendo só uma variável pra cada tela ou sub-tela.
O que vai pecisar avaliar é a questão do visual, porque o wvgpushbutton é do windows, no padrão do windows, e não tem o que mexer, nem mesmo mudar a cor.
GTWVG - Tamanho da fonte na função wvt_DrawButton()
Enviado: 05 Mai 2023 09:56
por JoséQuintas
Padrão do windows, ou assim ou nada feito.
Pode trocar imagem, pode usar ou não texto, mas a cor é essa.
Só alterei pra redimensionar o ícone automático.
Com BMP não transparente, cobre tudo com outra cor, seria a opção de mudar a cor.
Isso NÃO É barra de ferramentas, são buttons mesmo, coloquei um do lado do outro, e criei um button vazio pra usar o espaço que sobrava e parecer uma barra.
GTWVG - Tamanho da fonte na função wvt_DrawButton()
Enviado: 05 Mai 2023 10:13
por JoséQuintas
como fica tudo no mesmo lugar, e eu uso uma classe pra facilitar, eu só digo que buttons eu quero.
Código: Selecionar todos
oFrm:cOpc := iif( mProgAnt == "PFINANEDRECEBER", "I", "A" ) // Default do menu
oFrm:acMenuOptions := { "<B>Baixa" }
IF mProgAnt == "PFINANEDRECEBER"
AAdd( oFrm:acMenuOptions, "<T>Troca" )
AAdd( oFrm:acMenuOptions, "<F3>Duplicata" )
AAdd( oFrm:acMenuOptions, "<O>Ocorr." )
AAdd( oFrm:acMenuOptions, "<F4>Boleto" )
ENDIF
AAdd( oFrm:acMenuOptions, "<Q>PesqDoc" )
IF pw_TemAcesso( "PEDVERPDF" )
AAdd( oFrm:acMenuOptions, "<W>VerPDF" )
ENDIF
IF mProgAnt == "PFINANEDRECEBER"
oFrm:cOptions := "AEI"
ELSE
oFrm:cOptions := "CA"
ENDIF
oFrm:Execute()
Lá na rotina, ela já escolhe qual é a imagem, conforme o conteúdo, assim o aplicativo fica padronizado.
E tenho uma função que retorna a opção escolhida, em caractere.
Código: Selecionar todos
DO CASE
CASE ::cOpc == "F3"
CASE ::cOpc == "F4"
CASE ::cOpc == "O"
CASE ::cOpc == "W"
CASE ::cOpc == "Q"
CASE ::cOpc == "T"
CASE ::cOpc == "B"
OTHERWISE
lProcessou := .F.
ENDCASE
O fonte nem sabe se é teclado, mouse, button. o fonte apenas usa a resposta.
GTWVG - Tamanho da fonte na função wvt_DrawButton()
Enviado: 08 Mai 2023 21:39
por JoséQuintas
Um exemplo

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 vai criar a rotina pra reduzir fonte é com você, aí é só um exemplo.
Note que o fonte normal não sabe que os buttons existem.
Os buttons vão agir como teclado, fazendo o KEYBOARD.
É apenas um PROMPT comum.
No activate() acho que aciona multithread, o que pode complicar, então melhor usar só keyboard mesmo, e ficar sob o controle do fluxo normal do aplicativo.
Por muitos anos só usei esse button e mais nada.
Dá pra dizer que você usa mais gtwvg do que eu, eu uso pouca coisa, por enquanto.