USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Texto Justificado como no WORD
Treze
Pontos: 2843 Pontos: 2843
SÃO VICENTE
SP - BRASIL
ENUNCIADA !
Postada em 08/09/2011 13:30 hs            
Carlos você trouxe ao topico de 2005, vc não justifica nada em textbox, somente em Richtextbox.
   
Carlos
não registrado
Postada em 08/09/2011 14:30 hs   
Treze eu sei que o topico é antigo, mas foi apenas para não criar outro.

Dificil aceitar que o VB não tenha como justificar.

O Richtextbox não me atende pelo fato que necessita de OCX e eu queria algo sem usar outro controle, mesmo assim  um campo texto multiline teria o mesmo efeito em um Richtextbox.

A função deveria da certo, acho que falta ajustar algum parametro, pois OverFlow ultrapassou o limite da posição e creio que seria necessário ajustar justamente neste dimensionamento da posição.



     
Alessandro
não registrado
Postada em 09/12/2015 16:19 hs   
Boa Tarde Pessoal,

Primeiramente gostaria de agradecer o post do Mateus que elucidou e muito o problema de alinhamento que estou tendo, eu fiz algumas mudanças no código coisa pouca e também consegui visualizar e elucidar o Overflow levantado pelo Carlos.
Qualquer problema relatem, Obrigado !!!

Option Explicit
Private Sub Command1_Click()
Dim aVetor() As String
Dim intI As Integer

    'Para um form arraste 2 textboxs e 1 CommandButton

    'No CommandButton, escreva:
    
    'ANTIGO
    Me.Text2 = Justifica(Me.Text1, Me.Text2, Me)

    'NOVO
    Justificar_Texto Me.Text1, Me.Text4, Me, aVetor()
    
    Text4.Text = ""
    
    For intI = 0 To UBound(aVetor)
        
        Text4.Text = Text4.Text & aVetor(intI) & Chr(13) & Chr(10)
    
    Next
    
    'CONVERSÃO DE PIXELS PARA TWIPS. 1 PIXEL VALE 15 TWIPS
    Grid1.Column(1).Width = Val(Text3.Text)
    Text3.Width = Grid1.Cell(1, 1).Width * 15
    

End Sub

'*****************************************************************************************************************************
'                                                                                                                            '
' ALINHAMENTO JUSTIFICADO DE TEXTO EM UM CAMPO OBJETO TEXT BOX E O RETORNO EM UM VETOR COM AS VARIAS LINHAS JUSTIFICADAS.    '
'                                                                                                                            '
'*****************************************************************************************************************************

Public Sub Justificar_Texto(ByVal strTextoOriginal As String, _
                            ByRef Controle_de_Texto As Control, _
                            ByRef obj As Object, _
                            ByRef aVetor() As String)
Dim strCaracterPosicional As String         'Carac
Dim strNovoTexto As String                  'NewText
Dim intTamanhodeEspaces As Integer          'WidthSpace
Dim intTamanhodoControle As Integer         'WidthControl
Dim intI As Integer                         'I
Dim intInicio As Integer                    'inicio
Dim intMaximoPosicional As Integer          'MaxPos
Dim intPosicaodoEspace As Integer           'PosSpace
Dim intTamanhodoTexto As Integer            'SizeText

'A variável FinalText troquei pelo Vetor que retornará preenchido

    ReDim aVetor(0) As String

    'As próximas 4 linhas definem as propriedades de fontes do objecto com as
    'definições da caixa de texto que irá receber o texto justificado, pois as
    'dimensões do texto para cálculos são feitas através da propriedade TextWidth
    'do objecto
    obj.FontName = Controle_de_Texto.FontName
    obj.FontSize = Controle_de_Texto.FontSize
    obj.FontBold = Controle_de_Texto.FontBold
    obj.FontItalic = Controle_de_Texto.FontItalic
    
    'Obtém o tamanho da caixa de texto que irá receber o texto alinhado
    intTamanhodoControle = Controle_de_Texto.Width
    
    'Obtém o tamanho de espaço na fonte atual
    intTamanhodeEspaces = obj.TextWidth(" ")
    
    'obtém o tamanho do texto a ser justificado
    intTamanhodoTexto = Len(strTextoOriginal)
    
    intI = 1
    intInicio = 1
    
    If obj.TextWidth(strTextoOriginal) <= intTamanhodoControle Then
        
        intMaximoPosicional = intTamanhodoControle + 1
        
        Retorna_Linha_Justificada strTextoOriginal, _
                                  Controle_de_Texto, _
                                  obj, _
                                  aVetor(), _
                                  intTamanhodoControle, _
                                  intTamanhodeEspaces, _
                                  intI, _
                                  intInicio, _
                                  intMaximoPosicional, _
                                  strNovoTexto
    
    Else
    
        Do While intI < intTamanhodoControle + 1
            
            'extrai um caracter de cada vez
            strCaracterPosicional = Mid(strTextoOriginal, intI, 1)
            
            'cria nova sequência de caracteres
            strNovoTexto = strNovoTexto + strCaracterPosicional
            
            Select Case strCaracterPosicional
                
                'se o caracter for ENTER - final do parágrafo ...
                Case Chr(13)
                    
                    If aVetor(0) <> "" Then
                    
                        ReDim Preserve aVetor(UBound(aVetor) + 1) As String
                        
                    End If
                    
                    aVetor(UBound(aVetor)) = Left(strNovoTexto, Len(strNovoTexto) - 1)
                    
                    strNovoTexto = ""
                    intI = intI + 1
                    intMaximoPosicional = 0
                    intInicio = intI + 1
                    
                'se o caracter for ESPAÇO
                Case " "
                
                    If obj.TextWidth(strNovoTexto) > intTamanhodoControle Then
                    
                        Retorna_Linha_Justificada strTextoOriginal, _
                                                  Controle_de_Texto, _
                                                  obj, _
                                                  aVetor(), _
                                                  intTamanhodoControle, _
                                                  intTamanhodeEspaces, _
                                                  intI, _
                                                  intInicio, _
                                                  intMaximoPosicional, _
                                                  strNovoTexto
    
                    Else
                    
                        intMaximoPosicional = intI
                        
                    End If
                    
            End Select
                
            intI = intI + 1
            
        Loop
        
        If Len(strNovoTexto) > 0 Then
            
            If aVetor(0) <> "" Then
            
                ReDim Preserve aVetor(UBound(aVetor) + 1) As String
                
            End If
            
            aVetor(UBound(aVetor)) = Trim(strNovoTexto)
        
        End If
        
    End If
    
End Sub

Private Function Retorna_Linha_Justificada(ByVal strTextoOriginal As String, _
                                           ByRef Controle_de_Texto As Control, _
                                           ByRef obj As Object, _
                                           ByRef aVetor() As String, _
                                           ByRef intTamanhodoControle As Integer, _
                                           ByRef intTamanhodeEspaces As Integer, _
                                           ByRef intI As Integer, _
                                           ByRef intInicio As Integer, _
                                           ByRef intMaximoPosicional As Integer, _
                                           ByRef strNovoTexto As String) As String
Dim intNumerodeEspaces As Integer           'NumSpaces
Dim intN As Integer                         'n
Dim strCaracterPosicional As String         'Carac
Dim intEspacesInStrucoes As Integer         'SpaceInstr
Dim intPosicional As Integer                'POSI
Dim intContadorEspaces As Integer           'CI
Dim strProximoCaracter As String            'NextCarac
Dim intPoscharBreak As Integer              'PoscharBreak

    'Se a nova seqüência for maior que o controle que irá receber o texto,
    'refaz a nova seqüência para caber na caixa de texto
    strNovoTexto = Mid(strTextoOriginal, intInicio, intMaximoPosicional - intInicio)
    
    'obtém o número de espaços necessários, que deverão ser inseridos
    'na nova seqüência de texto
    intNumerodeEspaces = Fix((intTamanhodoControle - obj.TextWidth(strNovoTexto)) / intTamanhodeEspaces) - 1
    
    For intN = 1 To Len(strNovoTexto)
        
        'Calcula o número de espaços existentes na nova seqüência de texto
        strCaracterPosicional = Mid(strNovoTexto, intN, 1)
        If strCaracterPosicional = " " Then intEspacesInStrucoes = intEspacesInStrucoes + 1
        
    Next intN
                    
    intPosicional = 1
    intContadorEspaces = 1
    intPoscharBreak = 0
    
    Do While intContadorEspaces < intNumerodeEspaces And intPosicional <= Len(strNovoTexto)
    
        'Insere espaços no texto nos espaços já existentes no mesmo
        strCaracterPosicional = Mid(strNovoTexto, intPosicional, 1)
        
        If strCaracterPosicional = " " Then
            
            'Faltou andar aqui até o próximo preenchido, pois ele já adicionou espaços no texto para justificar
            For intN = intPosicional + 1 To Len(strNovoTexto)
                
                strProximoCaracter = Mid(strNovoTexto, intPosicional + 1, 1)
                    
                If strProximoCaracter <> " " Then Exit For
                    
                intPosicional = intPosicional + 1
                    
            Next
            
            If strProximoCaracter <> " " Then
                
                strNovoTexto = Mid(strNovoTexto, 1, intPosicional) + String(1, " ") + Mid(strNovoTexto, intPosicional + 1)
                intPosicional = intPosicional + 1
                intContadorEspaces = intContadorEspaces + 1
                
            End If
            
            intPoscharBreak = intPoscharBreak + 1
            
            If intPoscharBreak = intEspacesInStrucoes Then
                
                intPoscharBreak = 0
                intPosicional = 0
                
            End If
            
        End If
        
        intPosicional = intPosicional + 1
        
    Loop
    
    If aVetor(0) <> "" Then
    
        ReDim Preserve aVetor(UBound(aVetor) + 1) As String
        
    End If
    
    aVetor(UBound(aVetor)) = Trim(strNovoTexto)
    
    strNovoTexto = ""
    intI = intMaximoPosicional
    intMaximoPosicional = 0
    intInicio = intI + 1

End Function
     
Alessandro
não registrado
Postada em 11/12/2015 14:49 hs   
Pessoal eu revisei o código e agora me parece correto, eu testei num sistema de contabilidade onde possui varias bases com muitos textos por ter historicos e nome das contas analiticas é isso. Abraços,

'*****************************************************************************************************************************
'                                                                                                                            '
' ALINHAMENTO JUSTIFICADO DE TEXTO EM UM CAMPO OBJETO TEXT BOX E O RETORNO EM UM VETOR COM AS VARIAS LINHAS JUSTIFICADAS.    '
'                                                                                                                            '
'*****************************************************************************************************************************

Public Sub Justificar_TextBox(ByVal strTextoOriginal As String, _
                              ByRef Controle_de_Texto As Control, _
                              ByRef Obj As Object, _
                              ByRef aVetor() As String, _
                              ByVal blnJustificado As Boolean)
Dim strCaracterPosicional As String         'Carac
Dim strNovoTexto As String                  'NewText
Dim strSimbolodeBusca As String             'Procurar não só espaço como /,;
Dim intTamanhodeEspaces As Integer          'WidthSpace
Dim intTamanhodoControle As Integer         'WidthControl
Dim intI As Integer                         'I
Dim IntInicio As Integer                    'inicio
Dim intSimbolo As Integer                   'Rodar for...next buscando o simbolo.
Dim intMaximoPosicional As Integer          'MaxPos
Dim intPosicaodoEspace As Integer           'PosSpace
Dim intTamanhodoTexto As Integer            'SizeText
Dim intPosicaoNova As Integer

'A variável FinalText troquei pelo Vetor que retornará preenchido

    ReDim aVetor(0) As String

    'As próximas 4 linhas definem as propriedades de fontes do objecto com as
    'definições da caixa de texto que irá receber o texto justificado, pois as
    'dimensões do texto para cálculos são feitas através da propriedade TextWidth
    'do objecto
    Obj.FontName = Controle_de_Texto.FontName
    Obj.FontSize = Controle_de_Texto.FontSize
    Obj.FontBold = Controle_de_Texto.FontBold
    Obj.FontItalic = Controle_de_Texto.FontItalic
    
    'Obtém o tamanho da caixa de texto que irá receber o texto alinhado
    intTamanhodoControle = Controle_de_Texto.Width
    
    'Obtém o tamanho de espaço na fonte atual
    intTamanhodeEspaces = Obj.TextWidth(" ")
    
    'obtém o tamanho do texto a ser justificado
    intTamanhodoTexto = Len(strTextoOriginal)
    
    intI = 1
    IntInicio = 1
    
    If Obj.TextWidth(strTextoOriginal) <= intTamanhodoControle Then
        
        intMaximoPosicional = intTamanhodoControle + 1
        
        Retorna_Linha_Justificada strTextoOriginal, _
                                  Controle_de_Texto, _
                                  Obj, _
                                  aVetor(), _
                                  intTamanhodoControle, _
                                  intTamanhodeEspaces, _
                                  intI, _
                                  IntInicio, _
                                  intMaximoPosicional, _
                                  strNovoTexto, _
                                  blnJustificado
    
    Else
    
        Do While intI < intTamanhodoControle + 1
            
            'extrai um caracter de cada vez
            strCaracterPosicional = Mid(strTextoOriginal, intI, 1)
            
            'cria nova sequência de caracteres
            strNovoTexto = strNovoTexto + strCaracterPosicional
            
            Select Case strCaracterPosicional
                
                'se o caracter for ENTER - final do parágrafo ...
                Case Chr(13)
                
                    If Len(Trim(strNovoTexto)) > 0 Then
                    
                        If aVetor(0) <> "" Then
                        
                            ReDim Preserve aVetor(UBound(aVetor) + 1) As String
                            
                        End If
                        
                        aVetor(UBound(aVetor)) = Left(strNovoTexto, Len(strNovoTexto) - 1)
                        
                    End If
                    
                    strNovoTexto = ""
                    intI = intI + 1
                    intMaximoPosicional = 0
                    IntInicio = intI + 1
                    
                'se o caracter for ESPAÇO
                Case " "
                
                    If Obj.TextWidth(strNovoTexto) > intTamanhodoControle Then
                        
                        intMaximoPosicional = intI
                        
                        Retorna_Linha_Justificada strTextoOriginal, _
                                                  Controle_de_Texto, _
                                                  Obj, _
                                                  aVetor(), _
                                                  intTamanhodoControle, _
                                                  intTamanhodeEspaces, _
                                                  intI, _
                                                  IntInicio, _
                                                  intMaximoPosicional, _
                                                  strNovoTexto, _
                                                  blnJustificado
    
                    Else
                    
                        intMaximoPosicional = intI
                        
                    End If
                    
                Case Else
                
                    If Obj.TextWidth(strNovoTexto) > intTamanhodoControle Then
                    
                        'CASO NÃO ENCONTRE " " QUE É O PADRÃO ENCONTRAR OUTRO SIMBOLO
                        'COMO BASE DE SEPARAÇÃO, CASO NÃO ENCONTRE CORTAR O TEXTO MESMO.
                        For intSimbolo = 1 To 6
                            
                            If intSimbolo = 1 Then
                                
                                strSimbolodeBusca = " "
                                
                            ElseIf intSimbolo = 2 Then
                            
                                strSimbolodeBusca = "/"
                                
                            ElseIf intSimbolo = 3 Then
                            
                                strSimbolodeBusca = ""
                                
                            ElseIf intSimbolo = 4 Then
                            
                                strSimbolodeBusca = ","
                                
                            ElseIf intSimbolo = 5 Then
                            
                                strSimbolodeBusca = ";"
                                
                            End If
                            
                            'SE ESTOUROU E NÃO COMPLETOU A ULTIMA PALAVRA, COLOCA-LA NA
                            'LINHA SEGUINTE.
                            For intPosicaoNova = intMaximoPosicional To 1 Step -1
                                
                                If Mid(strTextoOriginal, intPosicaoNova, 1) = strSimbolodeBusca Then
                                
                                    'SE A POSICAO NOVA FOR MAIOR QUE INTINICIO CHAMAR FUNÇÃO.
                                    If intPosicaoNova < IntInicio Then
                                                                    
                                        'CASO NÃO SEJA, BUSCAR POR OUTRO SIMBOLO, CASO JÁ ESTOUROU
                                        'A PROCURA CORTAR O TEXTO.
                                        If intSimbolo < 6 Then
                                        
                                            Exit For
                                        
                                        End If
                                    
                                    Else
                                        
                                        intI = intPosicaoNova
                                        intMaximoPosicional = intI
                                                                                
                                    End If
                                                                    
                                    Retorna_Linha_Justificada strTextoOriginal, _
                                                              Controle_de_Texto, _
                                                              Obj, _
                                                              aVetor(), _
                                                              intTamanhodoControle, _
                                                              intTamanhodeEspaces, _
                                                              intI, _
                                                              IntInicio, _
                                                              intMaximoPosicional, _
                                                              strNovoTexto, _
                                                              blnJustificado And strSimbolodeBusca = " "
                                    
                                    strSimbolodeBusca = "ACHOU"
                                    Exit For
                                
                                End If
                                
                            Next
                            
                            If strSimbolodeBusca = "ACHOU" Then Exit For
                        
                        Next
                    
                    Else
                    
                        intMaximoPosicional = intI
                        
                    End If
                    
            End Select
                
            intI = intI + 1
            
        Loop
        
        If Len(Trim(strNovoTexto)) > 0 Then
        
            If Len(strNovoTexto) > 0 Then
                
                If aVetor(0) <> "" Then
                
                    ReDim Preserve aVetor(UBound(aVetor) + 1) As String
                    
                End If
                
                aVetor(UBound(aVetor)) = Trim(strNovoTexto)
            
            End If
            
        End If
        
    End If
    
End Sub

Private Function Retorna_Linha_Justificada(ByVal strTextoOriginal As String, _
                                           ByRef Controle_de_Texto As Control, _
                                           ByRef Obj As Object, _
                                           ByRef aVetor() As String, _
                                           ByRef intTamanhodoControle As Integer, _
                                           ByRef intTamanhodeEspaces As Integer, _
                                           ByRef intI As Integer, _
                                           ByRef IntInicio As Integer, _
                                           ByRef intMaximoPosicional As Integer, _
                                           ByRef strNovoTexto As String, _
                                           ByVal blnJustificado As Boolean) As String
Dim intNumerodeEspaces As Integer           'NumSpaces
Dim intN As Integer                         'n
Dim strCaracterPosicional As String         'Carac
Dim intEspacesInStrucoes As Integer         'SpaceInstr
Dim intPosicional As Integer                'POSI
Dim intContadorEspaces As Integer           'CI
Dim strProximoCaracter As String            'NextCarac
Dim intPoscharBreak As Integer              'PoscharBreak

    'Se a nova seqüência for maior que o controle que irá receber o texto,
    'refaz a nova seqüência para caber na caixa de texto
    strNovoTexto = Mid(strTextoOriginal, IntInicio, intMaximoPosicional - IntInicio)
    
    If blnJustificado Then
    
        'obtém o número de espaços necessários, que deverão ser inseridos
        'na nova seqüência de texto
        intNumerodeEspaces = Fix((intTamanhodoControle - Obj.TextWidth(strNovoTexto)) / intTamanhodeEspaces) - 1
        
        intEspacesInStrucoes = 0
        
        For intN = 1 To Len(strNovoTexto)
            
            'Calcula o número de espaços existentes na nova seqüência de texto
            strCaracterPosicional = Mid(strNovoTexto, intN, 1)
            If strCaracterPosicional = " " Then
                
                If intN + 1 <= Len(strNovoTexto) Then
                    
                    If Mid(strNovoTexto, intN + 1, 1) <> " " Then
                        
                        intEspacesInStrucoes = intEspacesInStrucoes + 1
                        
                    End If
                    
                End If
                
            End If
            
        Next intN
                        
        intPosicional = 1
        intContadorEspaces = 1
        intPoscharBreak = 0
        
        Do While intContadorEspaces < intNumerodeEspaces And intEspacesInStrucoes > 0
        
            'Insere espaços no texto nos espaços já existentes no mesmo
            strCaracterPosicional = Mid(strNovoTexto, intPosicional, 1)
            
            If strCaracterPosicional = " " Or Len(strNovoTexto) = intPosicional Then
                
                'Faltou andar aqui até o próximo preenchido, pois ele já adicionou espaços no texto para justificar
                For intN = intPosicional + 1 To Len(strNovoTexto)
                    
                    strProximoCaracter = Mid(strNovoTexto, intPosicional + 1, 1)
                        
                    If strProximoCaracter <> " " Then Exit For
                        
                    intPosicional = intPosicional + 1
                        
                Next
                
                If strProximoCaracter <> " " Then
                    
                    strNovoTexto = Mid(strNovoTexto, 1, intPosicional) + String(1, " ") + Mid(strNovoTexto, intPosicional + 1)
                    intPosicional = intPosicional + 1
                    intContadorEspaces = intContadorEspaces + 1
                    
                End If
                
                intPoscharBreak = intPoscharBreak + 1
                
                If intPoscharBreak = intEspacesInStrucoes Then
                    
                    intPoscharBreak = 0
                    intPosicional = 0
                    
                End If
                
            End If
            
            intPosicional = intPosicional + 1
            
        Loop
        
    End If
    
    If Len(Trim(strNovoTexto)) > 0 Then
    
        If aVetor(0) <> "" Then
        
            ReDim Preserve aVetor(UBound(aVetor) + 1) As String
            
        End If
        
        aVetor(UBound(aVetor)) = Trim(strNovoTexto)
        
    End If
    
    strNovoTexto = ""
    intI = intMaximoPosicional
    intMaximoPosicional = 0
    IntInicio = intI + 1

End Function
     
Página(s): 2/2     « ANTERIOR  


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página