WIN32PRN() c/ sobrescrito e subscrito

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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() ?
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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?
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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 ) )
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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.
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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"),,, )
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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é?
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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...
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

WIN32PRN() c/ sobrescrito e subscrito

Mensagem 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.
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Responder