Página 1 de 1
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 23 Mai 2022 12:10
por Linguagemclipper
Como faço?
Preciso imprimir uma numeração tipo índice de rodapé colocando uma numeração em sobrescrito.
Não tinha sobrescrito nem subscrito no meu código ainda.
Não tem no win32prn() ?
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 23 Mai 2022 22:56
por Jairo Maia
Linguagemclipper escreveu:Não tinha sobrescrito nem subscrito no meu código ainda.
O que você chama de sobrescrito e subscrito? Pode explicar melhor?
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 24 Mai 2022 10:59
por Jairo Maia
Jairo Maia escreveu:O que você chama de sobrescrito e subscrito? Pode explicar melhor?
Ops... Falta de atenção. Relendo sua mensagem entendi.
Nunca usei também mas com Win_Prn acho que poderia ser com
:textAtFont().
Sobrescrito:
Código: Selecionar todos
oPrinter:textAtFont( Nil, oPrinter:PosY - ( oPrinter:lineHeight / 2 ), "Seu Texto", Nil, ( oPrinter:fontPointSize / 2 ) )
Subscrito:
Código: Selecionar todos
oPrinter:textAtFont( Nil, oPrinter:PosY + ( oPrinter:lineHeight / 2 ), "Seu Texto", Nil, ( oPrinter:fontPointSize / 2 ) )
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 02 Jun 2022 13:47
por Linguagemclipper
Jairo Maia escreveu:Jairo Maia escreveu:O que você chama de sobrescrito e subscrito? Pode explicar melhor?
Ops... Falta de atenção. Relendo sua mensagem entendi.
Nunca usei também mas com Win_Prn acho que poderia ser com
:textAtFont().
Sobrescrito:
Código: Selecionar todos
oPrinter:textAtFont( Nil, oPrinter:PosY - ( oPrinter:lineHeight / 2 ), "Seu Texto", Nil, ( oPrinter:fontPointSize / 2 ) )
Subscrito:
Código: Selecionar todos
oPrinter:textAtFont( Nil, oPrinter:PosY + ( oPrinter:lineHeight / 2 ), "Seu Texto", Nil, ( oPrinter:fontPointSize / 2 ) )
Olá Jairo, obrigado pela luz!
Vou dar uma olhada se tenho como implementar isso aí no meu sistema de impressão.
Fiz algo provisório com em código ASCII, mas só conta até 3: ¹,²,³. Como dificilmente iria até 3 está indo...
Quando for pegar pra fazer dou um feedback.
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 14 Jun 2022 18:01
por Linguagemclipper
Testei seu exemplo, mas a letra não diminuiu...
Outra observação: ele ativa e tem que desativar depois com um comando inverso.
Fiz uns testes e ajustes e ficou melhor assim:
Código: Selecionar todos
oPrinter:TextOut(RTRIM("H"),,, )
oPrinter:textAtFont( Nil, oPrinter:PosY + ( oPrinter:fontPointSize / 2 ), "", Nil, oPrinter:SetFont(,oPrinter:fontPointSize / 2)) // ATIVA SUBSCRITO
oPrinter:TextOut(RTRIM("2"),,, ) // esse '2' sairá subscrito
oPrinter:textAtFont( Nil, oPrinter:PosY - ( oPrinter:fontPointSize / 2 ), "", Nil, oPrinter:SetFont(,oPrinter:fontPointSize + oPrinter:fontPointSize)) // DESATIVA SUBSCRITO
oPrinter:TextOut(RTRIM("O"),,, )
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 14 Jun 2022 19:10
por Jairo Maia
Caramba...
Na verdade sugeri os exemplos e como você pode ver sem fazer os testes. Importante que está funcional, mas se tiver um tempo, tente ver onde eu errei nos parâmetros da :textAtFont(), porque tenho certeza que em um deles ela retorna a posição original do cursor (talvez troquei o .F. por .T. ou vice-versa). É que devo ter errado em um deles (eu acho, ou mudou).
Mas que bom que pode ajudar em algo. Valeu pelo retorno.
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 15 Jun 2022 00:59
por Linguagemclipper
O subscrito ficou certinho, o H2O ficou show, mas o sobrescrito não está...

Vim testar agora a noite o sobrescrito colocando a numeração de rodapé¹
-------------------
¹Rodapé
O problema é que não teve fórmula que desse certo... até agora. Amanhã vou tentar mais, mas já saí da inércia, né?
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 15 Jun 2022 11:14
por JoséQuintas
Linguagemclipper escreveu:O subscrito ficou certinho, o H2O ficou show, mas o sobrescrito não está...

Vim testar agora a noite o sobrescrito colocando a numeração de rodapé¹
-------------------
¹Rodapé
O problema é que não teve fórmula que desse certo... até agora. Amanhã vou tentar mais, mas já saí da inércia, né?
É só pensar igual ao bom e velho console.
Pelo que entendi da rotina ela usa metade do tamanho da letra ( fontsize / 2 )
Só precisa ajustar pra X/Y, porque se for igual PDF, a linha seguinte é tirando o valor e não somando.
Acho que pra parte de baixo talvez seja a posição normal, e só pra parte de cima precise ajustar.
Só testando.
Se a impressão considera como referência a linha de baixo: embaixo é normal, e encima tira meio fonte.
Se a impressão considera como referência a linha de cima, embaixo soma meio fonte, e encima é normal.
Considerando que o somar/tirar meio fonte pode ser sinal invertido, depende de como funciona a referência x/y de winprn.
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 15 Jun 2022 11:30
por JoséQuintas
De novo:
Pelo menos no PDF, na hora de imprimir o texto, o texto é considerado de baixo pra cima, a posição de impressão é a parte de baixo da letra.
Se for assim, o subscrito é a mesma posição, e o sobrescrito seria a posição voltando meio fonte.
E lógico... o texto vai ser no tamanho de meio fonte.
E o detalhe adicional é como calcula X/Y.
No PDF a posição ZERO é a última e não a primeira. Ao somar um número na posição está indo pra cima e não pra baixo.
Agora é testar usando essas referências, pra ver se o texto está subindo ou descendo, pra ver se vai ter que somar ou tirar.
E ver como que trata o tamanho do texto no winprn.
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 21 Jun 2022 00:37
por Linguagemclipper
Conseguí, ficou certinho dessa forma no xHarbour 1.2.1, mas no Harbour 3.2 ficou pra cima parecendo sobrescrito ao invés de subscrito.
Vou ter que jogar um #ifdef __XHARBOUR para compilar de um jeito para o xHarbour e de outro jeito para Harbour.
Desse jeito ficou certinho no xHarbour:
Código: Selecionar todos
oPrinter:TextOut(RTRIM("H"),,, )
oPrinter:textAtFont( Nil, oPrinter:PosY + ( oPrinter:lineHeight * 0,05 ), "", Nil, oPrinter:SetFont(,oPrinter:fontPointSize / 2)) // ATIVA SUBSCRITO
oPrinter:TextOut(RTRIM("2"),,, ) // esse '2' sairá subscrito
oPrinter:textAtFont( Nil, oPrinter:PosY - ( oPrinter:lineHeight * 0,05 ), '', Nil, oPrinter:SetFont(,oPrinter:fontPointSize + oPrinter:fontPointSize)) // DESATIVA SUBSCRITO
oPrinter:TextOut(RTRIM("O"),,, )
No Harbour tem que fazer novos testes...
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 21 Jun 2022 01:27
por JoséQuintas
Talvez dependa do texto anterior, sei lá....
Mesmo caso que já comentei: o desenho começa de cima pra baixo ou de baixo pra cima?
E o WinPrn? deveria considerar a posição escolhida, mas e se está ficando algum "lixo" do fonte anterior?
Talvez primeiro setar fonte e depois posicionar, ou posicionar e depois setar fonte....
Talvez compense uns testes básicos desse tipo.
Ou até o velho truque da matricial, vai saber.... de posicionar e mandar um espaço em branco.
De repente acaba achando algum bug em alguma das LIBs.
Não sei se dá pra usar de outra linguagem de programação pra fazer um comparativo, com outra referência.
Ou de outra LIB.
WIN32PRN() c/ sobrescrito e subscrito
Enviado: 21 Jun 2022 23:26
por Linguagemclipper
Já resolví tudo aqui.
A questão é que oPrinter:lineHeight começa em cima no xHarbour e no Harbour começa embaixo. Só inverter os cálculos quando compilar com o outro.