Página 1 de 1
Função para dividir uma linha de texto com justificação
Enviado: 27 Mai 2019 23:27
por Paulao
Boa noite pessoal, estou criando um sistema livro caixa que tem um campo carácter com 160 caracteres chamado histórico do lançamento, necessito fazer quebra de linhas para 4 linhas na impressão, até ai tudo bem pois existe um comando que faz isto automático, a diferença é que quero que o texto dentro das linhas fique justificado, como acontece no word por exemplo.
Obrigado
Função para dividir uma linha de texto com justificação
Enviado: 28 Mai 2019 08:08
por Poka
Bom dia
Fiz esta rotina faz muito tempo, veja se serve
Código: Selecionar todos
funct ajustaHis(xhistorico,xlargura)
// justifica a direita
local contlin,texto,falta:=0 , vhistorico:="" ,a
xhistorico:=strtran( xhistorico,chr(13)+chr(10) ,"" )
contlin=mlcount(xhistorico,xlargura)
if contlin=0
retu .t.
endif
for a=1 to contlin
texto:=trim(memoline(xhistorico,xlargura,a))
IF .NOT. EMPTY(TEXTO)
margemE:=len(texto)-len(ltrim(texto))
falta:=xlargura-len(texto)
// verifica a quantidade de ocorrencias dessa linha
if right(texto,1)#"." .and. falta>0
texto:=strtran(alltrim(texto)," "," ","",falta)
CONTA:=0
do while margeME+len(texto)<xlargura .AND. CONTA<XLARGURA
texto:=strtran(alltrim(texto)," "," ",1,1)
CONTA++
enddo
vhistorico+=space(MargemE)+texto+fl
else
vhistorico+=texto+fl
endif
ELSE
vhistorico+=texto+fl
ENDIF
next
retu vhistorico
Poka
Função para dividir uma linha de texto com justificação
Enviado: 28 Mai 2019 20:43
por Paulao
Boa noite amigo Poka, na sua funcao, na linha 22 ele faz referencia a uma variavel FL que nao foi declarada, poderia me dar uma força?
Função para dividir uma linha de texto com justificação
Enviado: 29 Mai 2019 08:02
por Poka
Bom dia
Verdade, desculpa Paulão
Poka
Função para dividir uma linha de texto com justificação
Enviado: 29 Mai 2019 08:59
por lugab
Paulão,
Que comando é esse ?
necessito fazer quebra de linhas para 4 linhas na impressão, até ai tudo bem pois existe um comando que faz isto automático
Bom dia a todos !!!
Função para dividir uma linha de texto com justificação
Enviado: 29 Mai 2019 16:57
por JoséQuintas
https://github.com/JoseQuintas/JoseQuin ... e_func.prg
Dá uma olhada em:
TrechoJust()
TextToArray()
Justifica()
Por falar nisso... tá na hora de organizar essas funções, e tem mais espalhadas no meu aplicativo.
Função para dividir uma linha de texto com justificação
Enviado: 29 Mai 2019 17:13
por JoséQuintas
Esta opção é interessante:
Código: Selecionar todos
mTexto := "bbbbbb"
DO WHILE Len( mTexto ) > 80
@ Row() + 1, 0 SAY TrechoJust( @mTexto, 80 )
ENDDO
@ Row() + 1, 0 SAY mTexto
ou esta:
Código: Selecionar todos
atxtList := {}
mTexto := "bbbbbb"
DO WHILE Len( mTexto ) > 80
AAdd( aTxtList, TrechoJust( @mTexto, 80 ) )
ENDDO
AAdd( aTxtList, mTexto )
RETURN aTxtList
ou esta:
Código: Selecionar todos
cTexto := "bbbbb"
FOR EACH cTxt IN TextToArray( cTexto, 80, .T. )
@ Row() + 1, 0 SAY cTxt
NEXT
Função para dividir uma linha de texto com justificação
Enviado: 30 Mai 2019 09:07
por Paulao
lugab escreveu:Paulão,
Que comando é esse ?
necessito fazer quebra de linhas para 4 linhas na impressão, até ai tudo bem pois existe um comando que faz isto automático
Bom dia a todos !!!
@ 205 , 10 PRINT 'This is a long long text to test multiline print..' ;
TO 235 , 30 ;
FONT 'Arial' ;
SIZE 11 ;
COLOR { 0 , 0 , 255 }
Função para dividir uma linha de texto com justificação
Enviado: 30 Mai 2019 10:02
por JoséQuintas
Outra opção é usando MemoLine() e MLCount(), divide sem cortar palavras, mas sem fazer o alinhamento.
Função para dividir uma linha de texto com justificação
Enviado: 13 Abr 2022 13:43
por FabioAugusto
Jose Quintas, boa tarde!
Ainda tem disponivel essas 3 funções no servidor do github ?
[*]
Mensagem por JoséQuintas » 29 Mai 2019 16:57
https://github.com/JoseQuintas/JoseQuin ... e_func.prg
Dá uma olhada em:
TrechoJust()
TextToArray()
Justifica()
Por falar nisso... tá na hora de organizar essas funções, e tem mais espalhadas no meu aplicativo.
[*]
Obrigado!
Função para dividir uma linha de texto com justificação
Enviado: 14 Abr 2022 09:04
por Poka
Bom dia
Código: Selecionar todos
funct ajustaHis(xhistorico,xlargura)
local contlin,falta:=0,vhistorico:="" , x:="",a,ax , xlinhaAntes:="" , xletra:="" , Mlinhas:={} , xlinha:=""
local xlinhaComMargem:=""
local xlinhaSemMargem:=""
local xlinhaInteira:="" // com margem
local xlinhaSoTexto:="" // sem margem esquerda/direita
local FL:=CHR(13)+CHR(10) // FIM DE LINHA
// obs: se a linha terminar com ponto ou dois pontos nao justifica
contlin=mlcount(xhistorico,xlargura)
if contlin=0
retu .t.
endif
vhistorico:=""
for a:= 1 to contlin
xlinha:=memoline(xhistorico,xlargura,a )
xlinha:=strtran( xlinha,chr(13),"")
xlinha:=strtran( xlinha,chr(10),"")
aadd(mlinhas,xlinha)
next
*--------------
for a:= 1 to len(mLinhas)
xlinha:= mLinhas[a]
xlinhaComMargem:=xlinha
xlinhaSemMargem:=ltrim(xlinha)
margemE:=len(xlinha)-len( ltrim(xlinha) )
margemD:=xlargura - margemE - len(alltrim(xlinha) )
xlinhaSoTexto:=alltrim(xlinha)
IF .not. empty(xlinha)
*---acerta os espacos----------------------------------
if ! right(xlinhaSoTexto,1) $ ".:"
xlinhaSoTexto:=tirabranco(xlinhaSoTexto)
xqtBranco:=nuMat(" ",xlinhaSoTexto) // funcao do harbour
xlinhaAntes:=""
xqtBrancoIncluir:=xlargura-len(xlinhaSoTexto) - margemE
*-----------------------
xconta:=0
do while xqtbrancoIncluir > 0 .and. xqtbranco >0
xlinhaAntes:=""
for ax:= 1 to len(xlinhaSoTexto)
xletra:=substr( xlinhaSoTexto,ax,1)
xlinhaAntes+=xletra
if xletra = " " .and. xqtbrancoIncluir > 0
xLinhaAntes+=" "
xqtbrancoIncluir--
endif
next
xlinhaSotexto:=xlinhaantes
enddo
vhistorico+=spac(margemE) +xlinhaSotexto+fl
else
vhistorico+=xlinha+fl
endif
else
vhistorico+=xlinha+fl
endif
next
*---------------------
xhistorico:=vhistorico
retu (xhistorico)
Poka
Função para dividir uma linha de texto com justificação
Enviado: 14 Abr 2022 13:05
por FabioAugusto
Obrigado Poka!
Função para dividir uma linha de texto com justificação
Enviado: 14 Abr 2022 15:17
por JoséQuintas
A LIB que existia teve muitas rotinas alteradas pra ADO/MYSQL, acabei tirando do ar, e não coloquei de volta.
Manter duas versões, só duplica trabalho de manutenção.
Vou ver depois o que dá pra fazer.
Provavelmente deixar tudo no existente addons ou hbaddons, nem lembro o nome.
Função para dividir uma linha de texto com justificação
Enviado: 14 Abr 2022 15:22
por JoséQuintas
E falando no alinhamento:
Na sefazclass tem o alinhamento baseado em largura de texto, e não em caracteres, na montagem do Danfe.
Aliás.... é quase um gerador de relatórios pra parte de produtos da nota.
As colunas podem ou não sair, e tudo é ajustado conforme as colunas que saem.
Pode ter casas decimais de tamanho variado, etc.
É isso que um gerador de relatório faz...
Função para dividir uma linha de texto com justificação
Enviado: 14 Abr 2022 16:57
por Poka
Boa tarde.
Na função acima faltou a função TIRABRANCO()
//////
FUNCT TIRABRANCO(XVAR)
// so tira o branco a mais
LOCAL A ,x
DO WHILE " "$ XVAR
XVAR:=STRTRAN(XVAR," "," ")
ENDDO
RETU (XVAR)
Poka