sublinhar
Moderador: Moderadores
sublinhar
Pessoal estou precisando de uma mãozinha, preciso imprimir a primeira linha de um formulario em modo sublinhado , mas a questão é ; Como faço para sublinhar apenas os caracteres e ignorar os espaçoes em branco ?
linha1 //esta sublinhado assim
_____________________________
linha2 //gostaria de sublinhar apenas esta palavra
______
té++
linha1 //esta sublinhado assim
_____________________________
linha2 //gostaria de sublinhar apenas esta palavra
______
té++
C:\Xharbour\Xdev\Fw\VSX
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Veja se isto resolve colega:
Um clip-abraço :)Pos
Código: Selecionar todos
VAR1:="TESTE DE SUBLINHADO NESTA LINHA"
VSTRING:=""
? VAR1
? ""
FOR I=1 TO LEN(VAR1)
IF !(SUBSTR(VAR1,I,1)=" ")
VSTRING:=VSTRING+SUBSTR(VAR1,I,1)
IF I=LEN(VAR1)
?? REPLICATE("-",LEN(VSTRING))
ENDIF
ELSE
?? REPLICATE("-",LEN(VSTRING))+SUBSTR(VAR1,I,1)
VSTRING:=""
ENDIF
NEXT- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
It´s very easy man !
So, try this:
Veja o CHR(13) poderá ser usado na maioria das impressoras para retorno do carro e também subtituí o TRAÇO-SIMPLES pelo SUB-TRAÇO para que fique embaixo dos caracteres.
Um clip-abraço :)Pos
So, try this:
Código: Selecionar todos
VAR1:="TESTE DE SUBLINHADO NESTA LINHA"
VSTRING:=""
SET PRIN ON
? VAR1
?? CHR(13)
FOR I=1 TO LEN(VAR1)
IF !(SUBSTR(VAR1,I,1)=" ")
VSTRING:=VSTRING+SUBSTR(VAR1,I,1)
IF I=LEN(VAR1)
?? REPLICATE("_",LEN(VSTRING))
ENDIF
ELSE
?? REPLICATE("_",LEN(VSTRING))+SUBSTR(VAR1,I,1)
VSTRING:=""
ENDIF
NEXT
SET PRIN OFFUm clip-abraço :)Pos
Ederxc,
Vc quer caracteres sublinhados e não a impressão de "_"s, certo? Uma idéia: imprima cada linha "em pedaços", ativando e desativando o MODO sublinhado de impressão.
No exemplo a seguir, uso comandos da Epson e um FOR/NEXT (imprimindo caracter a caracter) só pra facilitar. Dá pra melhorar usando o AT(), SUBSTR() etc.
Eolo
Vc quer caracteres sublinhados e não a impressão de "_"s, certo? Uma idéia: imprima cada linha "em pedaços", ativando e desativando o MODO sublinhado de impressão.
No exemplo a seguir, uso comandos da Epson e um FOR/NEXT (imprimindo caracter a caracter) só pra facilitar. Dá pra melhorar usando o AT(), SUBSTR() etc.
Eolo
Código: Selecionar todos
texto="Imprimindo sublinhado somente os caracteres"
set prin to lpt1
set devi to prin
priv x,y
priv ativado:=.f. // flag pra evitar repetição do comando ESC
for x=1 to len(texto)
y=substr(texto,x,1)
ativa(iif(y==" ",0,1))
@prow(),pcol() say y
next
set prin to
set devi ro scre
function ativa(opcao)
* comandos da Epson
if opcao=1 .and. (!ativado)
chr(27)+"-"+"1" -> ativa sublinhado
ativado=.t.
else opcao=0 .and. ativado
chr(27)+"-"+"0" -> desativa sublinhado
ativado=.f.
endi- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Comandos Epson ?. Para ativar condensado é CHR(15) e para voltar ao tamanho 10cpi é CHR(18). Para ativar tamanho 12cpi para impressoras LX300 é CHR(27)+CHR(77) mas para outros modelos é CHR(27)+CHR(77)+CHR(15).
Estes comandos, você encontra no manual da impressora ou até mesmo na INTERNET, procure por LINHA DE COMANDO.
Meu conselho é fazer um DBF de impressoras com esses comandos e seus modelos, assim se o cliente mudar de impressora, ele mesmo pode selecionar e mudar a interpretação de comandos de acordo com seu DBF.
Eu não tenho site, mas gostaria de elaborar um banco de dados e disponibiliz-alo ao público (aos programadores) a fim de que esse banco servisse para utilização e para que o pessoal pudesse acrescentar novas impressras com seus comandos. Inclusive a minha idéia seria fazer a identificação da impressora de acordo com o que está instalado no próprio WINDOWS. E daí poderiamos utilizar o WAPI do MALIGNO, ora para identificar e/ou para imprimir.
Um clip-abraço :)Pos
Obs.: O colega EOLO me ganhou de mão, eu estava respondendo mas a comunicação com o FORUM quebrou na hora que estava mandando, sorte que sepre faço CTRL C para guardar no CLIPBOARD, mas o colega ja tinha respondido. Mas não faz mal, o exemplo que dí também serve, ora porque só utiliza o retorno do carro, e a maioria faz com o mesmo comando. :)Pos
Estes comandos, você encontra no manual da impressora ou até mesmo na INTERNET, procure por LINHA DE COMANDO.
Meu conselho é fazer um DBF de impressoras com esses comandos e seus modelos, assim se o cliente mudar de impressora, ele mesmo pode selecionar e mudar a interpretação de comandos de acordo com seu DBF.
Eu não tenho site, mas gostaria de elaborar um banco de dados e disponibiliz-alo ao público (aos programadores) a fim de que esse banco servisse para utilização e para que o pessoal pudesse acrescentar novas impressras com seus comandos. Inclusive a minha idéia seria fazer a identificação da impressora de acordo com o que está instalado no próprio WINDOWS. E daí poderiamos utilizar o WAPI do MALIGNO, ora para identificar e/ou para imprimir.
Um clip-abraço :)Pos
Obs.: O colega EOLO me ganhou de mão, eu estava respondendo mas a comunicação com o FORUM quebrou na hora que estava mandando, sorte que sepre faço CTRL C para guardar no CLIPBOARD, mas o colega ja tinha respondido. Mas não faz mal, o exemplo que dí também serve, ora porque só utiliza o retorno do carro, e a maioria faz com o mesmo comando. :)Pos
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Eu entendo que "retorno do carro" seja voltar a cabeça de impressão seja no PCOL()=0 ou PCOL()=PCOL()-1 com BACKSPACE (CHR(8)). E não acho que seja assim EOLO, ora pois eu acostumo testar antes de postar o meu código, e quando testei na EPSON LX-300, fez direitinho, não mudou de linha.Eolo escreveu:Acho que o chr(13) faz o pcol() voltar pra zero mas faz pular de linha, somando 1 no prow().
Também não posso AFIRMAR com VEMÊNCIA como iria se comportar com as outras impressoras. Mas a princípio, não creio que não funcione.
Gostaria de saber aqui, se funcionou em outras impressoras e peço a opinião de todos que testaram o retorno de carro, para eu não ter passado uma instrução falsa. Mas acredito que irá funcionar.
Um clip-abraço :)Pos
Pablo,
Vc tem razão.
Eu fui "traído" pelo excesso de idade... eh eh eh É que o termo "carriage return" vem do tempo das máquinas de escrever e representava nelas o avanço de linha e o retorno à posição zero, diferente da computação.
http://en.wikipedia.org/wiki/Carriage_return
Eu, embora olhando o manual da Epson, me confundi.
Desculpe.
Eolo
Vc tem razão.
Eu fui "traído" pelo excesso de idade... eh eh eh É que o termo "carriage return" vem do tempo das máquinas de escrever e representava nelas o avanço de linha e o retorno à posição zero, diferente da computação.
http://en.wikipedia.org/wiki/Carriage_return
Eu, embora olhando o manual da Epson, me confundi.
Desculpe.
Eolo
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
hahaha realmente, é essa a definição do WIKIPEDIA. Mas não se preocupe por isso nem pelo "excesso de idade"... hehe eu também poderia dizer que a cor da minha certidão de nascimento é amarela... hihihi (assim disse o colega MALIGNO)
Mas viu como é importante o debate no FORUM, pois só enriquece o nosso conhecimento. Legal ! :)Pos
Mas viu como é importante o debate no FORUM, pois só enriquece o nosso conhecimento. Legal ! :)Pos

