Página 1 de 1

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 07 Out 2021 15:51
por Jairo Maia

Código: Selecionar todos

Wvt_DrawLabel( nRow, nCol, cLabel, nAlign, nAngle, cTextColor, cBackColor, ;
cFontFace, nFontHeight, nFontWidth, nFontWeight, nFontQuality, ;
nCharSet, lItalic, lUnderline, lStrikeout )
Por favor, alguém pode me explicar quais são os valores válidos para os parâmetros abaixo?:

nAlign - Quais posso usar e qual efeito? (chutei alguns números, o efeito é nada a ver... os que deram efeito foi coisa maluca mesmo)
nCharSet - Quais posso usar? (nem testei nada, não tenho ideia do que é um CharSet numérico)

Obrigado.

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 07 Out 2021 16:26
por marcosgambeta
O parâmetro nAlign controla o alinhamento do texto. O 'default' é TA_LEFT.

Internamente, a função Wvt_DrawLabel chama a função SetTextAlign:

https://docs.microsoft.com/en-us/window ... ttextalign

O arquivo wvtwin.ch contém estas constantes:

Código: Selecionar todos

#define TA_NOUPDATECP                             0
#define TA_UPDATECP                               1

#define TA_LEFT                                   0
#define TA_RIGHT                                  2
#define TA_CENTER                                 6

#define TA_TOP                                    0
#define TA_BOTTOM                                 8
#define TA_BASELINE                               24
#define TA_RTLREADING                             256
#define TA_MASK                                   (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING)
#define VTA_BASELINE                              TA_BASELINE
#define VTA_LEFT                                  TA_BOTTOM
#define VTA_RIGHT                                 TA_TOP
#define VTA_CENTER                                TA_CENTER
#define VTA_BOTTOM                                TA_RIGHT
#define VTA_TOP                                   TA_LEFT

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 07 Out 2021 16:33
por marcosgambeta
No caso do parâmetro nCharSet, se refere ao conjunto de caracteres.

Internamente, é o membro lfCharSet da estrutura LOGFONT:

https://docs.microsoft.com/en-us/window ... i-logfonta

As constantes estão no arquivo wvtwin.ch:

Código: Selecionar todos

#define ANSI_CHARSET                              0
#define DEFAULT_CHARSET                           1
#define SYMBOL_CHARSET                            2
#define SHIFTJIS_CHARSET                          128
#define HANGEUL_CHARSET                           129
#define HANGUL_CHARSET                            129
#define GB2312_CHARSET                            134
#define CHINESEBIG5_CHARSET                       136
#define OEM_CHARSET                               255
#define JOHAB_CHARSET                             130
#define HEBREW_CHARSET                            177
#define ARABIC_CHARSET                            178
#define GREEK_CHARSET                             161
#define TURKISH_CHARSET                           162
#define VIETNAMESE_CHARSET                        163
#define THAI_CHARSET                              222
#define EASTEUROPE_CHARSET                        238
#define RUSSIAN_CHARSET                           204
#define MAC_CHARSET                               77
#define BALTIC_CHARSET                            186
O valor 'default' é o valor do membro 'codepage' da estrutura HB_GTWVT. Inicialmente, é definido como OEM_CHARSET. Se o desenvolvedor não mudar, permanece este.

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 07 Out 2021 17:10
por Jairo Maia
Olá Marcos Gambeta,

Há quanto tempo, legal vê-lo aqui novamente...

Muito obrigado pelas esclarecedoras respostas, mas não é assim...

Quanto ao CharSet ok, entendi, valeu.

Quanto a nAlign, quer seja usando TA_LEFT, TA_RIGHT, TA_CENTER, o resultado é: "Procure um psiquiatra...", rs...

Não funciona, o resultado é maluco mesmo...

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 07 Out 2021 17:11
por JoséQuintas
Talvez nos exemplos encontre alguma coisa.

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 07 Out 2021 17:58
por Jairo Maia
JoséQuintas escreveu:Talvez nos exemplos encontre alguma coisa.
Já tentei, e muito. Não há nada para esclarecer.

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 07 Out 2021 18:41
por marcosgambeta
Testei este exemplo aqui:

Código: Selecionar todos

#include "wvtwin.ch"

PROCEDURE Main()

   wvt_setgui( .T. )

   SET COLOR TO N/W

   CLS

   wvt_settitle( "Teste com Wvt_DrawLabel" )

   wvt_drawlabel( 05, 10, "TA_LEFT", , , RGB( 255, 255, 255 ), RGB( 198, 158, 198 ), "Arial", 26, , , , , .T., .T. )

   wvt_drawlabel( 10, 10, "TA_RIGHT",  TA_RIGHT, , RGB( 255, 255, 255 ), RGB( 198, 158, 198 ), "Arial", 26, , , , , .T., .T. )

   wvt_drawlabel( 15, 10, "TA_CENTER", TA_CENTER, , RGB( 255, 255, 255 ), RGB( 198, 158, 198 ), "Arial", 26, , , , , .T., .T. )

   inkey(0)

RETURN
Usando como ponto de referência a linha/coluna inicial, notem que:

TA_LEFT: o texto parte do ponto de referência para a direita, ficando alinhado pela esquerda com ele

TA_RIGHT: o texto parte do ponto de referência para a esquerda, ficando alinhado pela direita com ele

TA_CENTER: o texto é centralizado usando o ponto de referência, ficando parte do texto à esquerda e parte à direita

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 07 Out 2021 19:28
por JoséQuintas
Me dá a impressão de que está ao contrário.
A não ser que o alinhamento se refira ao espaço em branco, e não ao texto.

Pede à esquerda fica à direita, e vice-versa.

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 07 Out 2021 19:31
por JoséQuintas
Só comentário:

Essas funções WVT_ são aquelas que precisa ficar repintando pra não sumirem, colocar no evento Paint.
Já as funções WVG_ são o contrário, precisa destruir pra elas sumirem.

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 07 Out 2021 19:40
por JoséQuintas
Aproveitando do Marcos Gambeta, que está por aqui:

Por acaso deu uma olhada na parte interna da GTWVG?
Me refiro às funções wvg, com ponto de partida na wnd.prg, passando por dialog.prg, e depois as demais?
Não seria interessante expandir isso?
Fazer parte do Harbour pode facilitar uma adoção maior por parte dos usuários.
Mas a parte de compatibilidade com APIs Windows está diferente entre 3.2 e 3.4, em todas as LIBs Windows, incluindo WVT, WVG, WVW, hbwin.
Lembrando que não tem exemplo disso, não adianta procurar.

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 08 Out 2021 14:57
por marcosgambeta
Este segundo teste pode deixar mais claro o uso das constantes TA_LEFT, TA_RIGHT e TA_CENTER:

Código: Selecionar todos

#include "wvtwin.ch"

PROCEDURE Main()

   wvt_setgui( .T. )

   SET COLOR TO N/W

   CLS

   wvt_settitle( "Teste com Wvt_DrawLabel" )

   wvt_paint()

   inkey(0)

RETURN

FUNCTION Wvt_Paint()

   wvt_drawlabel( 00, maxcol() / 2, "LABEL CENTRALIZADO NA PRIMEIRA LINHA",  TA_CENTER, , RGB( 255, 255, 255 ), RGB( 198, 158, 198 ), "Arial", 18, , , , , .T., .T. )

   wvt_drawlabel( maxrow() / 2, 02, "TA_LEFT", TA_LEFT, , RGB( 255, 255, 255 ), RGB( 198, 158, 198 ), "Arial", 26, , , , , .T., .T. )

   wvt_drawlabel( maxrow() / 2, maxcol() / 2, "TA_CENTER", TA_CENTER, , RGB( 255, 255, 255 ), RGB( 198, 158, 198 ), "Arial", 26, , , , , .T., .T. )

   wvt_drawlabel( maxrow() / 2, maxcol() - 2, "TA_RIGHT",  TA_RIGHT, , RGB( 255, 255, 255 ), RGB( 198, 158, 198 ), "Arial", 26, , , , , .T., .T. )

   wvt_drawlabel( maxrow(), maxcol() / 2, "LABEL CENTRALIZADO NA ULTIMA LINHA",  TA_CENTER, , RGB( 255, 255, 255 ), RGB( 198, 158, 198 ), "Arial", 18, , , , , .T., .T. )

RETURN 0
O ponto de referência é formado pela linha/coluna inicial. O sentido do texto vai depender da constante usada:

TA_LEFT: o texto começa no ponto de referência
TA_RIGHT: o texto termina no ponto de referência
TA_CENTER: o ponto de referência é o centro do texto
Teste em execução
Teste em execução
drawlabel2.png (10.24 KiB) Exibido 6352 vezes

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet [Resolvido]

Enviado: 08 Out 2021 15:07
por Jairo Maia
marcosgambeta escreveu:TA_LEFT: o texto começa no ponto de referência
TA_RIGHT: o texto termina no ponto de referência
TA_CENTER: o ponto de referência é o centro do texto
Olá Marcos Gambeta, mais uma vez obrigado.

Entrei no fórum e ia postar que Finalmente entendi como funciona os métodos de alinhamento na função Wvt_DrawLabel(), isso porque você já tinha postado algo similar mais acima, e foi com base em sua postagem anterior que entendi o "raciocínio" desse método de alinhamento.

Entendi, achei que tem razão prá ser assim, e principalemte: FUNCIONA!!! Quer seja com fonte mono-espaçada ou largura variável (com Kernel), dá certinho em ambos casos.

Muito obrigado Marcos Gambeta pelas dicas. Assunto resolvido.

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 08 Out 2021 15:10
por marcosgambeta
JoséQuintas escreveu: Por acaso deu uma olhada na parte interna da GTWVG?
Me refiro às funções wvg, com ponto de partida na wnd.prg, passando por dialog.prg, e depois as demais?
Não seria interessante expandir isso?
Não me aprofundei (ainda) na parte das classes, mas acho que é uma biblioteca que vale a pena manter atualizada e funcional. Tem muitos recursos e há potencial para ser ampliada.
JoséQuintas escreveu: Fazer parte do Harbour pode facilitar uma adoção maior por parte dos usuários.
Mas a parte de compatibilidade com APIs Windows está diferente entre 3.2 e 3.4, em todas as LIBs Windows, incluindo WVT, WVG, WVW, hbwin.
Lembrando que não tem exemplo disso, não adianta procurar.
Algo que ajudaria seria uma biblioteca padrão de ligação com a API do Windows. Esta seria a única função da biblioteca: servir de ponte entre o [x]Harbour e a WINAPI. E quando uma biblioteca precisasse usar uma função da WINAPI, usaria esta biblioteca.

Mas como não existia algo assim quando as bibliotecas surgiram, cada uma implementou o que precisava na ocasião. Padronizar isto agora não é uma tarefa fácil.

No caso da gtwvg, o que poderia ajudar agora seria ter mais exemplos. Não um exemplo enorme, usando muitos recursos, mas sim exemplos curtos e simples demonstrando uma coisa específica. Pessoalmente, acho que assim fica mais fácil para estudo/aprendizado.

Wvt_DrawLabel() - Parâmetros nAlign e nCharSet

Enviado: 08 Out 2021 18:51
por JoséQuintas
marcosgambeta escreveu:Algo que ajudaria seria uma biblioteca padrão de ligação com a API do Windows. Esta seria a única função da biblioteca: servir de ponte entre o [x]Harbour e a WINAPI. E quando uma biblioteca precisasse usar uma função da WINAPI, usaria esta biblioteca.

Mas como não existia algo assim quando as bibliotecas surgiram, cada uma implementou o que precisava na ocasião. Padronizar isto agora não é uma tarefa fácil.

No caso da gtwvg, o que poderia ajudar agora seria ter mais exemplos. Não um exemplo enorme, usando muitos recursos, mas sim exemplos curtos e simples demonstrando uma coisa específica. Pessoalmente, acho que assim fica mais fácil para estudo/aprendizado.
Pois é, no Harbour 3.4 o Viktor acrescentou definições no Harbour pra parâmetros de API do Windows.
Além disso, ele procurou mover tudo de chamadas à API Windows para a HBWIN, pra ficar padronizado e disponível pra uso geral.

Nesses fontes que mencionei, pode ver que é uma central de desenvolvimento GUI, nos moldes de HWGUI e outras.
Na prática nem tem exemplo nenhum dessa parte, e não dá pra saber se tudo está pronto pra uso.
wnd.prg é o fonte central das janelas
dialog.prg é o fonte da dialog pra usar GUI.
os demais são herdados, igual toda lib GUI faz, pra buttons, textbox, label, e até o tabcontrol.
NÃO se trata da parte de CUI, e sim de um ambiente GUI, escondido nos fontes da GTWVG, que por sua vez fazem parte do Harbour.
Por mais incrível que pareça, NÃO TEM nenhum exemplo que use essa parte "escondida".
Parece até que sou um dos únicos que viu, e usa, essa parte.

Nota: desculpem desviar o assunto, mas sabem que pra mim considero isso importante da GTWVG/Harbour.