Página 1 de 2

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 28 Abr 2023 13:41
por Jairo Maia
Como alterar o tamanho da fonte num botão desenhado com a função wvt_DrawButton()? Tem como?

OBS: Não é o caso de substituir por wvgPushButton(). Me refiro mesmo a wvt_DrawButton().

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 28 Abr 2023 14:08
por JoséQuintas
Acho que só alterando o fonte em C

Código: Selecionar todos

/* wvt_DrawButton( nTop, nLeft, nBottom, nRight, cText, cnImage, ;
                  nFormat, nTextColor, nBkColor, nImageAt, aPxlOff ) */
HB_FUNC( WVT_DRAWBUTTON )
Como o desenho é direto na tela, talvez apagando o pedaço e escrevendo por cima
Teria que acrescentar as duas coisas na rotina que redesenha.

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 28 Abr 2023 14:11
por JoséQuintas
Não sei se fui claro...

Como alternativa, tem a rotina do button e a rotina de escrever texto.
Desenha o button como é hoje, e escreve o texto por cima pela DrawText (acho que é esse o nome)

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 28 Abr 2023 14:24
por Jairo Maia
JoséQuintas escreveu:e escreve o texto por cima pela DrawText (acho que é esse o nome)
É a wvt_DrawLabel(). Sim, isso é que faço hoje, mas realmente poderia ter um jeito de alterar o tamanho do fonte pela wvt_DrawButton(), ficaria bem mais "limpo".

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 28 Abr 2023 14:31
por JoséQuintas
Jairo Maia escreveu:E a wvt_DrawLabel(). Sim, isso é que faço hoje, mas realmente poderia ter um jeito de alterar o tamanho do fonte pela wvt_DrawButton(), ficaria bem mais "limpo".
Se usa muito, na falta de opção, crie sua função intermediária

Código: Selecionar todos

FUNCTION MyDrawButton()
   wvt_DrawButton()
   wvt_DrawLabel()
   RETURN Nil

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 28 Abr 2023 19:13
por JoséQuintas
Nem queira saber a idéia que me veio a cabeça neste post.
Vou fazer uns testes depois.

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 28 Abr 2023 20:09
por JoséQuintas
Aonde controla o click do DrawButton() ? é manualmente no Inkey() ?

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 29 Abr 2023 00:13
por Jairo Maia
Isso mesmo. Pela posição do click identifica em que botão foi, e aciona a respectiva função.

OBS: Apenas para quem vier a ler posteriormente: Não é o caso de substituir por wvgPushButton().

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 29 Abr 2023 17:38
por JoséQuintas
O que o post me chamou a atenção, é que com as funções básicas, você pode fazer tudo que GUI faz, sem os PROBLEMAS da API Windows.
Já vou começar a pensar em jogar todos os meus controles no lixo, e usar dessa forma. (meus controles não, do Windows mesmo)
E isso deve acabar com o meus problemas "inexplicáveis", que só podem ter a ver com API Windows.

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 29 Abr 2023 20:40
por JoséQuintas
wvg.png
Só um teste básico pra ver se funcionava em janela CRT
Pra ver se o desenho ia sair na janela atual ou na de baixo.
Ainda não vi sobre o WVT_PAINT, acho que ele não serve nesse caso.

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 29 Abr 2023 20:47
por JoséQuintas
Mas voltando ao button.... pode fazer do jeito que quiser, não precisa nem usar o DrawButton original.

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 30 Abr 2023 14:17
por JoséQuintas
Pro meu caso, à primeira vista, não vai dar certo o outro uso.
Mas você pode tentar automatizar isso.

Basicamente vai precisar de um array de coordenadas, e das rotinas de criação, que usam o array dos desenhos pra wvt_paint(), que como já usa, não vai mudar seu modo de trabalho.

Código: Selecionar todos

aMouseList := {}
aPaintList   := {}
aMouseList pra usar no Inkey(), e aPaintList pra usar no WVT_Paint()

Na sua rotina de button, adiciona a parte de mouse em aMouseList e a parte do desenho em aPaintLIst.

Tipo....

Código: Selecionar todos

FUNCTION MyButton( top, left, bottom, right, cImage, cText, nKeyboard )
   AAdd( aMouseList, { top,left, bottom, right, nKeyboard } )
   AAdd( aPaintList, { || wvt_DrawImage( top, left, bottom, right, cImage } )
   AAdd( aPaintList, { || wvt_DrawLabel( top, left, bottom, right, cText } )
   RETURN Nil
E no Inkey, o tratamento que já deve fazer hoje, ou usando INKEYFILTER, ou SET KEY K_MOUSEDOWN, ou outro:

Código: Selecionar todos

DO WHILE nKey != K_ESC
   nKey := Inkey(0)
   IF nKey == K_MOUSEDOWN
      FOR EACH aList IN aMouseList
        IF MRow() >= aList[1] .AND. MCOL() >= aList[2] .AND. MROW() <= aList[3] .AND NROW() <= aList[4]
           nKey := aList[5]
          // conforme a situação Inkey(0);KEYBOARD Chr(aList[4]) ou hb_KeyPut() porque Chr() não vai atender F9 por exemplo
         // e em algumas situações testar nkey não é suficiente, precisa do KEYBOARD/hb_KeyPut().
         ENDIF
      NEXT
   ENDIF
ENDDO
Com isso, vai reduzindo seu fonte normal, e vai melhorando as rotinas conforme o que for acontecendo.

Sei que já disse várias vezes que não se trata do wvgpushbutton(), mas pode pensar nele.
Com ele, não vai precisar nem da conversão do inkey, e nem de ficar tratando wvt_Paint.
Nele é o contrário: vai ter que desabilitar, esconder ou destruir conforme o caso.
Mas.... vai ter que se conformar com o tamanho do texto dele

Com o wvt_DrawButton():
- tem que colocar na lista de wvt_Paint() e tem a rotina no inkey()
- no final do uso, limpa a lista de wvt_Paint()
- acho que não deixa usar resource, precisa do arquivo em disco

Com o wvgPushbutton():
- Apenas cria indicando o clique
- Destrói no final, ou esconde se for abrir janela/texto por cima (aqui é onde criar janelas facilita mais ainda)
- pode deixar o ícone em resource, embutido no EXE

Pode acabar gostando da troca.

Independente de usar wvt_DrawButton() ou wvgpushbutton(), uma rotina intermediária pode reduzir fonte.

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 30 Abr 2023 14:54
por JoséQuintas
Por exemplo, ao invés de colocar isto em tudo que é fonte:

Código: Selecionar todos

DO WHILE nKey != K_ESC
   nKey := Inkey(0)
   IF nKey == K_MOUSEDOWN
      FOR EACH aList IN aMouseList
        IF MRow() >= aList[1] .AND. MCOL() >= aList[2] .AND. MROW() <= aList[3] .AND NROW() <= aList[4]
           nKey := aList[5]
          // conforme a situação Inkey(0);KEYBOARD Chr(aList[4]) ou hb_KeyPut() porque Chr() não vai atender F9 por exemplo
         // e em algumas situações testar nkey não é suficiente, precisa do KEYBOARD/hb_KeyPut().
         ENDIF
      NEXT
   ENDIF
ENDDO
Poderia criar a genérica, apenas colocar essa parte na genérica.

Código: Selecionar todos

DO WHILE nKey != K_ESC
   nKey := Inkey(0)
   RotinaGenerica( @nKey, aMouseList )
ENDDO
A função substituiria tudo dos outros fontes

Código: Selecionar todos

FUNCTION RotinaGenerica( nKey, aMouseList )
   IF nKey == K_MOUSEDOWN
      FOR EACH aList IN aMouseList
        IF MRow() >= aList[1] .AND. MCOL() >= aList[2] .AND. MROW() <= aList[3] .AND NROW() <= aList[4]
           nKey := aList[5]
          // conforme a situação Inkey(0);KEYBOARD Chr(aList[4]) ou hb_KeyPut() porque Chr() não vai atender F9 por exemplo
         // e em algumas situações testar nkey não é suficiente, precisa do KEYBOARD/hb_KeyPut().
         ENDIF
      NEXT
   ENDIF
Na sua MyButton, já acrescentaria os cliques nessa aMouseList

Código: Selecionar todos

FUNCTION MyButton( top, left, bottom, right, ..., @aMouseList )
   AAdd( aMouseList, { top, left, botton, right, newkey } )
   RETURN Nil
É assim que vai conseguir reduzir seu fonte, independente de colocar o texto maior.
Mas assim já vai trocar todos os textos de todos os buttons pra maior, numa única rotina.
E já vai testar se a solução funcionou pra todas as situações de uma vez.

Atenção à variável por referência:
diz que array não precisa, mas não é bem assim.
Se não passar array por referência, isto não vai funcionar variavel := {}

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 03 Mai 2023 15:07
por Jairo Maia
JoséQuintas escreveu:Mas assim já vai trocar todos os textos de todos os buttons pra maior, numa única rotina.
Sim. É como está hoje. Concentro todas ações iguais em Funções iguais, e reduzo bastante códigos repetidos no sistema.
JoséQuintas escreveu:É assim que vai conseguir reduzir seu fonte,
Isso mesmo. Sempre procurei "otimizar" os fontes, e durante o período da pandemia, revisei os 3 sistemas que tenho comercialmente, e consegui otimizar e melhorar o visual com muitos menos linhas escritas.

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.

O objetivo do tópico era relamente saber se tinha alguma forma de customizar o tamanho dos fontes nos botões. Se verificarmos os fontes em "C", parece que é possível, mas "C" não é minha praia.

Valeu pela sua costumeira atenção. Obrigado.

GTWVG - Tamanho da fonte na função wvt_DrawButton()

Enviado: 03 Mai 2023 20:15
por JoséQuintas
Jairo Maia escreveu:O objetivo do tópico era relamente saber se tinha alguma forma de customizar o tamanho dos fontes nos botões. Se verificarmos os fontes em "C", parece que é possível, mas "C" não é minha praia.
Aquilo que está em C, dá pra fazer por PRG.
As mesmas funções tem em PRG.