Estes dias eu estava procurando uma forma de justificar um texto alinhado pois não estava precisando modificar a função Alert do harbour para trazer um design ao estilo flat UI.
Decidi procurar na internet e me deparei com o algoritimo de programação dinâmica conforme link abaixo:
http://prorum.com/?qa=2547/como-justifi ... o-dinamica
Este algoritimo funcionou muito bem e decidi transcreve-lo de Python para Harbour. Deixo o código fonte aqui para quem precisar usar.
Lembrando que este algoritimo esta preparado para justificar um paragrafo pois ele não prevê quebra de linha (line feed LF). Caso deseje justificar um texto que contenha LF você devera quebrar o seu texto em vários parágrafos, um para cada quebra de linha e chamar o método JustiticarParagrafo varias vezes.
segue o fonte em anexo!!!
rgds,
Justificando um texto usando programacao dinamica!
Moderador: Moderadores
Justificando um texto usando programacao dinamica!
- Anexos
-
testjustify.prg- Código Fonte para Justificar um Paragrafo
- (5.63 KiB) Baixado 137 vezes
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Justificando um texto usando programacao dinamica!
Eu tinha comentado sobre existir na josequintas....
O difícil foi encontrar aonde eu tinha colocado.... kkkkk
Por enquanto está na ze_func.prg, mas já pensando em reorganizar, depois de demorar pra localizar.
Na dúvida sobre aonde vai ficar, apenas a função.
Ela separara pelo espaço em branco, pra não cortar palavras, e opcionalmente aumenta os espaços intermediários pra também terminar numa mesma coluna.
Convém lembrar que a MemoLine() original do Clipper/Harbour fazem a divisão, mas sem ajuste adicional.
Também convém lembrar que em UTF-8 provavelmente vamos ter que repensar nossas atuais funções, inclusive essas.
O difícil foi encontrar aonde eu tinha colocado.... kkkkk
Por enquanto está na ze_func.prg, mas já pensando em reorganizar, depois de demorar pra localizar.
Na dúvida sobre aonde vai ficar, apenas a função.
Código: Selecionar todos
FUNCTION TextToArray( cTexto, nLargura, lAjusta )
LOCAL cLinha, nPos, acTextList := {}
hb_Default( @lAjusta, .T. )
cTexto := AllTrim( cTexto )
DO WHILE Len( cTexto ) > nLargura
nPos := Rat( " ", Left( cTexto + " ", nLargura ) )
IF nPos == 0
nPos := nLargura
ENDIF
cLinha := Left( cTexto, nPos - 1 )
cTexto := AllTrim( Substr( cTexto, nPos ) )
nPos := At( " ", cLinha )
IF lAjusta .AND. nPos != 0
DO WHILE Len( cLinha ) < nLargura
cLinha := Stuff( cLinha, nPos, 0, " " )
DO WHILE Substr( cLinha, nPos, 1 ) == " " .AND. nPos <= Len( cLinha )
nPos += 1
ENDDO
DO WHILE Substr( cLinha, nPos, 1 ) != " " .AND. nPos <= Len( cLinha )
nPos += 1
ENDDO
IF nPos >= Len( cLinha )
nPos := At( " ", cLinha )
ENDIF
ENDDO
ENDIF
Aadd( acTextList, cLinha )
ENDDO
IF Len( cTexto ) != 0
AAdd( acTextList, cTexto )
ENDIF
IF Len( acTextList ) == 0
acTextList := { "" }
ENDIF
RETURN acTextList
Convém lembrar que a MemoLine() original do Clipper/Harbour fazem a divisão, mas sem ajuste adicional.
Também convém lembrar que em UTF-8 provavelmente vamos ter que repensar nossas atuais funções, inclusive essas.
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
Justificando um texto usando programacao dinamica!
Em ação:
Com parâmetro .F.
Código: Selecionar todos
REQUEST HB_CODEPAGE_PTISO
#include "set.ch"
PROCEDURE Main
LOCAL cLinha
LOCAL cText := "Atuar com desenvolvimento OpenText Content Server (LiveLink), " + ;
"OpenText Capture Center (OCC), OpenText oscript, brava Enterprise, OpenText " + ;
"weblingo, XML/XSLT, C#, VB.net, Visual Basic, ASP, C, PL/SQL, HTML, Ajax, VB Script, " + ;
"Java script, jQuery, Object Pascal, FoxPro, Clipper, Fortran, CVS, Web Service " + ;
"Standards- SOAP, WSDL Bancos de dados Oracle, MS SQL Server, MS Access, InterBase, " + ;
"Informix. Experiência em CS 10,2 para CS V16 e desenvolver soluções de software usando. " + ;
"Conhecimento e experiência com o OpenText Content Server, Archive Server, Directory " + ;
"Services, extensões de fluxo de trabalho, exibições de formulário, relatórios, relatórios " + ;
"da Web, Capture Center, DocuLink, Document pipelines, desenvolvimento OScript, gerenciamento " + ;
"de registros, brava, Tivoli LDAP Server, Microsoft IIS, Microsoft SQL Server, SQL, Java, " + ;
"Javascript, JQuery, AJAX, HTML5, XML e CSS. Funcionalidade de fluxos de trabalho estendido, " + ;
"incluindo novas etapas e tipos de fluxo de trabalho. Inglês fluente"
Set( _SET_CODEPAGE, "PTISO" )
SetMode(30,90)
SetColor("W/B")
CLS
@ 1, 0 SAY ""
FOR EACH cLinha IN TextToArray( cText, 60, .T. )
@ Row() + 1, 0 SAY cLinha
NEXT
Inkey(0)
RETURN
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
Justificando um texto usando programacao dinamica!
É que usei 60 colunas, isso é pouco.
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/
