Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Dotinho

Limitar tamanho de strings

Mensagens Recomendadas

Dotinho

Olá a todos mais uma vez venho pedir uma ajudinha.. é assim, já tive a pensar o não sei como irei fazer..

Fiz um programa para copiar ficheiros, mas em postas com nome muito comprido, queria fazer do tipo que o windows faz, por exmplo:

C:\khipyn\oimpoum\iubyiouby\iouybo\ibt\ioynpoyu\file.txt

se a label tivesse só 50pix de comprimento, fazia do tipo

C:\khipyn....ioynpoyu\file.txt

Alguém tem ideia como fazer isso? é que eu não sei medir o tamanho do texto...


Luis Lourenço

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
paulo silva

Podes fazer de varias formas não sei qual a melhor.

   Dim valor As String = TextBox2.Text
        Dim valor1 As String = TextBox2.Text


        valor = valor.Remove(valor.Length - 2, 2)
        valor1 = valor1.Substring(valor.Length, 2)

        MsgBox(valor1, MsgBoxStyle.Critical, "Fim da string")

        MsgBox(valor, MsgBoxStyle.Critical, "valores a remover")

depois podes jogar com isto como achares melhor.

Cumprimentos Paulo Silva

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Dotinho

sim, mas o tamanho da string não pode ser medido assim, assim eu sei, mas não pode ser, pois as letras não tem todas o mesmo tamanho, tinha que ser medido em pixels. E não encontro função para isso..

Por exemplo: String1="lllllllllllllllllllll" ou String2="ooooooooooooooooooooooo"

cmps


Luis Lourenço

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
paulo silva

Já encontrei a tua solução  :D

 
Imports System.Drawing

Private Sub Calculartamanho()

        Dim myHwnd As IntPtr

        Dim returnValue As Drawing.Graphics
        returnValue = Drawing.Graphics.FromHwnd(myHwnd)

        Dim tamanho As SizeF
        Dim myFont As New Font("Arial", 10)

        tamanho = returnValue.MeasureString(TextBox2.Text, myFont)

        Dim width As String = tamanho.Width


        MsgBox(width)
    End Sub

Vê se funciona

Cumprimentos Paulo Silva

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Acabei de escrever este bloco só por curiosidade.

Espreita lá e vê se não é o que pretendes:

    Private Function MedirStr(ByVal Texto As String, ByVal Fonte As Font) As Integer
        Dim g As Graphics = Me.CreateGraphics
        Return CInt(g.MeasureString(Texto, Fonte).Width)
    End Function

    Private Function ReduzirStr(ByVal Texto As String, ByVal Fonte As Font, ByVal TamanhoAlvo As Integer) As String
        Const Separador As String = " (...) "

        If MedirStr(Separador, Fonte) > TamanhoAlvo Then Return "<>"
        If MedirStr(Texto, Fonte) < TamanhoAlvo Then Return Texto

        Dim TempStr As String = Texto

        Dim Parte1 As String = String.Empty
        Dim Parte2 As String = String.Empty

        While MedirStr(TempStr & Separador, Fonte) > TamanhoAlvo
            Parte1 = Strings.Left(TempStr, CInt(TempStr.Length / 2) - 2)
            Parte2 = Strings.Mid(TempStr, CInt(TempStr.Length / 2), TempStr.Length)
            TempStr = Parte1 & Parte2
        End While

        Return Parte1 & Separador & Parte2
    End Function

Para usar, por exemplo numa textbox:

        Dim TextoLongo As String = "C:\UmaPastita\DuasPastitas\TresPastitas\EUmFicheirito.lol"
        TextBox1.Text = ReduzirStr(TextoLongo, TextBox1.Font, TextBox1.Width)

Se usares numa label não te esqueças de retirar o AutoSize senão dá barraca.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Dotinho

Permite-me a alteração á tua função:

  Private Function ReduzirStr(ByVal Texto As String, ByVal Fonte As Font, ByVal TamanhoAlvo As Integer) As String
        Const Separador As String = " (...) "

        If MedirStr(Separador, Fonte) > TamanhoAlvo Then Return "<>"
        If MedirStr(Texto, Fonte) < TamanhoAlvo Then Return Texto

        Dim TempStr As String = Texto

        Dim Parte1 As String = String.Empty
        Dim Parte2 As String = String.Empty

        While MedirStr(TempStr & Separador, Fonte) > TamanhoAlvo
            Parte1 = Strings.Left(TempStr, CInt(TempStr.Length / 2) - 2)
            Parte2 = Strings.Mid(TempStr, CInt(TempStr.Length / 2), TempStr.Length)
            TempStr = Parte1 & Parte2
        End While
        Dim p1 = Parte1.Substring(0, Parte1.LastIndexOf("\") + 1)
        Dim p2 = Parte2.Substring(Parte2.IndexOf("\"))
        Return p1 & " ... " & p2
        'Return Parte1 & Separador & Parte2
    End Function

Em vez de deixar palavras a meio, corta pelas "\" ou seja, pelas pastas..

cmps


Luis Lourenço

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.