Função para dividir uma linha de texto com justificação
Moderador: Moderadores
Função para dividir uma linha de texto com justificação
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
Obrigado
Função para dividir uma linha de texto com justificação
Bom dia
Fiz esta rotina faz muito tempo, veja se serve
Poka
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
Função para dividir uma linha de texto com justificação
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
Paulão,
Que comando é esse ?
Que comando é esse ?
Bom dia a todos !!!necessito fazer quebra de linhas para 4 linhas na impressão, até ai tudo bem pois existe um comando que faz isto automático
lugab
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Função para dividir uma linha de texto com justificação
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.
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.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Função para dividir uma linha de texto com justificação
Esta opção é interessante:
ou esta:
ou esta:
Código: Selecionar todos
mTexto := "bbbbbb"
DO WHILE Len( mTexto ) > 80
@ Row() + 1, 0 SAY TrechoJust( @mTexto, 80 )
ENDDO
@ Row() + 1, 0 SAY mTexto
Código: Selecionar todos
atxtList := {}
mTexto := "bbbbbb"
DO WHILE Len( mTexto ) > 80
AAdd( aTxtList, TrechoJust( @mTexto, 80 ) )
ENDDO
AAdd( aTxtList, mTexto )
RETURN aTxtList
Código: Selecionar todos
cTexto := "bbbbb"
FOR EACH cTxt IN TextToArray( cTexto, 80, .T. )
@ Row() + 1, 0 SAY cTxt
NEXT
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/
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/
Função para dividir uma linha de texto com justificação
lugab escreveu:Paulão,
Que comando é esse ?Bom dia a todos !!!necessito fazer quebra de linhas para 4 linhas na impressão, até ai tudo bem pois existe um comando que faz isto automático
@ 205 , 10 PRINT 'This is a long long text to test multiline print..' ;
TO 235 , 30 ;
FONT 'Arial' ;
SIZE 11 ;
COLOR { 0 , 0 , 255 }
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Função para dividir uma linha de texto com justificação
Outra opção é usando MemoLine() e MLCount(), divide sem cortar palavras, mas sem fazer o alinhamento.
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/
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/
-
FabioAugusto
- Usuário Nível 1

- Mensagens: 12
- Registrado em: 05 Mai 2008 16:57
Função para dividir uma linha de texto com justificação
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!
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
Bom dia
Poka
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)
-
FabioAugusto
- Usuário Nível 1

- Mensagens: 12
- Registrado em: 05 Mai 2008 16:57
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Função para dividir uma linha de texto com justificação
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.
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.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Função para dividir uma linha de texto com justificação
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...
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...
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/
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/
Função para dividir uma linha de texto com justificação
Boa tarde.
Na função acima faltou a função TIRABRANCO()
Poka
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


