Página 1 de 1

sublinhar

Enviado: 03 Abr 2007 16:13
por ederxc
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é++

Enviado: 03 Abr 2007 16:43
por Pablo César
Veja se isto resolve colega:

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
Um clip-abraço :)Pos

Enviado: 04 Abr 2007 07:44
por ederxc
Amigo pablo , creio que ñ dara certo , pois este formulario é de etiquetas e sua alternativa , faz com que o trasejado seja jogado abaixo dos caracteres e acabe pegando a linha , ou parte da linha a baixo.


thanks guy !

Enviado: 04 Abr 2007 08:05
por Pablo César
It´s very easy man !

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 OFF
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

Enviado: 04 Abr 2007 08:16
por Eolo
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

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

Enviado: 04 Abr 2007 08:23
por Pablo César
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

Enviado: 04 Abr 2007 09:08
por ederxc
farei os testes ! :)Pos

Enviado: 04 Abr 2007 09:41
por Eolo
Pablo,
Veja o CHR(13) poderá ser usado na maioria das impressoras para retorno do carro...
Acho que o chr(13) faz o pcol() voltar pra zero mas faz pular de linha, somando 1 no prow().

Vc não quis de referir ao BACKSPACE, chr(8), caso em que o prow() não é alterado?

Eolo

Enviado: 04 Abr 2007 09:54
por Pablo César
Eolo escreveu:Acho que o chr(13) faz o pcol() voltar pra zero mas faz pular de linha, somando 1 no prow().
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.

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

Enviado: 04 Abr 2007 10:20
por Eolo
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

Enviado: 04 Abr 2007 10:34
por Pablo César
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

Enviado: 04 Abr 2007 14:23
por ederxc
Estou vendo que sou o unico moleque do forum , 23 anos !