vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Dateipfad auf bestimmte Länge (in Pixel) kürzen 
Autor: keco
Datum: 27.03.10 16:00

Hallo,

ich suche eine Möglichkeit einen Dateipfad auf eine gewisse Länge (angegeben in Pixel) zu kürzen. Ich weiß nur, wie ich einen Dateiname auf eine bestimmte Anzahl auf Zeichen kürzen kann. Das kann ich beispielsweise hiermit machen:
   <DllImport("shlwapi.dll", CharSet:=CharSet.Auto)> _
   Shared Function PathCompactPathEx(ByVal pszOut As System.Text.StringBuilder, _
   ByVal szPath As String, ByVal cchMax As Integer, ByVal dwFlags As Integer) _
   As Boolean
   End Function
 
   Public Function CompactPath(ByVal fullName As String, ByVal length As _
     Integer) As String
      Dim sb As New System.Text.StringBuilder(length + 1)
 
      Call PathCompactPathEx(sb, fullName, length, 0)
 
      Return sb.ToString
   End Function
Wie kann ich aber nun bei gegebener Labellänge (eben in Pixel) den Dateipfad so kürzen, dass er mit der maximalen Anzahl an Zeichen darin angezeigt wird? Das Problem ist, dass ich nicht die Länge eines einzelnen Zeichens berechnen kann und dann einfach entsprechend umrechnen, weil die Zeichenlänge ja immer unterschiedlich ist. Weiß jemand Rat?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateipfad auf bestimmte Länge (in Pixel) kürzen 
Autor: VB.NET2005
Datum: 27.03.10 17:20

Erstmal ne Tabelle mit jedem Zeichen und dessen Länge in Pixel erstellen, mit Substring die einzelnen Zeichen durchgehen und die Pixelwerte addieren.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateipfad auf bestimmte Länge (in Pixel) kürzen 
Autor: Snoopy
Datum: 27.03.10 17:30

Ich verstehe ehrlich gesagt nicht so ganz worauf Du hinaus willst
Aber wenn Du ein Label mit fester Länge hast, dann kannst Du doch einfach die AutoEllipsis Eigenschaft
auf True setzen. Abgeschnittene Texte werden dann im Tooltipp angezeigt. Reicht das nicht aus?

Gru?
---------------------------------------------------
Snoopy sagt - [email protected] find ich gut...
Schon gesehen? OSMMapViewer V2 Control

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateipfad auf bestimmte Länge (in Pixel) kürzen 
Autor: VB.NET2005
Datum: 27.03.10 17:33

Und die Ungenauigkiet meiner Methode kann doch max. die Größe eines w sein.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateipfad auf bestimmte Länge (in Pixel) kürzen 
Autor: Snoopy
Datum: 27.03.10 18:26

Ich glaube, Du meinst sowas hier:
Public Class PathLabel
   Inherits Label
 
   Private m_PathText As String
 
   Public Property PathText() As String
      Get
         Return m_PathText
      End Get
      Set(ByVal value As String)
         m_PathText = value
         Me.Text = CompactPath(value)
      End Set
   End Property
 
   Private Function CompactPath(ByVal sPath As String) As String
      Dim cPath As String = String.Copy(sPath)
      TextRenderer.MeasureText(cPath, Me.Font, New Drawing.Size(Me.Width, 0), _
      TextFormatFlags.PathEllipsis Or TextFormatFlags.ModifyString)
      Return cPath
   End Function
End Class
Die Autosize Eigenschaft des Labels musst Du auf False setzen und dann einfach an PathText deinen
Pfad/Dateiname übergeben

Gru?
---------------------------------------------------
Snoopy sagt - [email protected] find ich gut...
Schon gesehen? OSMMapViewer V2 Control

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateipfad auf bestimmte Länge (in Pixel) kürzen 
Autor: keco
Datum: 27.03.10 18:28

@VB.NET2005
Dazu müsste ich durch jedes einzelne Zeichen iterieren und abbrechen, wenn die Länge erreicht/überschritten wurde. Ist das denn auch schnell genug?

@Snoopy
Durch die API erhalte ich bspw diesen gekürzten Pfad: C:\Users\keco\Documents\Visual...\Debug
Durch die Eigenschaft AutoEllipsis wird aber das Ende vom gesamten Pfad abgeschnitten. Der Dateiname bzw. Verzeichnisname ist demnach nicht mehr sofort zu erkennen, sondern nur durch das ToolTip.

Das wollte ich insofern verhindern, dass ich eben die maximal mögliche Anzahl an Zeichen ermittel, damit die API aufrufe, dann erhalte ich eben einen entsprechend gekürzten Pfad. Und das ToolTip erhält den vollständigen Pfad.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateipfad auf bestimmte Länge (in Pixel) kürzen 
Autor: keco
Datum: 27.03.10 18:32

Ah ja, genau so etwas meinte ich. Ich kannte nur die MeasureString-Methode der Graphics-Klasse. Ich danke Dir.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateipfad auf bestimmte Länge (in Pixel) kürzen 
Autor: Snoopy
Datum: 27.03.10 18:44

So, und hier noch mit einem ToolTip dabei...

Public Class PathLabel
   Inherits Label
 
   Private m_PathText As String
   Private tTip As New ToolTip
 
   Public Property PathText() As String
      Get
         Return m_PathText
      End Get
      Set(ByVal value As String)
         m_PathText = value
         Me.Text = CompactPath(value)
      End Set
   End Property
 
   Private Function CompactPath(ByVal sPath As String) As String
      Dim cPath As String = String.Copy(sPath)
      TextRenderer.MeasureText(cPath, Me.Font, New Drawing.Size(Me.Width, 0), _
      TextFormatFlags.PathEllipsis Or TextFormatFlags.ModifyString)
      Return cPath
   End Function
 
   Protected Overrides Sub OnMouseEnter(ByVal e As System.EventArgs)
      If Not Me.Text.Equals(m_PathText) Then
         tTip.SetToolTip(Me, m_PathText)
      Else
         tTip.SetToolTip(Me, "")
      End If
 
      MyBase.OnMouseEnter(e)
   End Sub
End Class

Gru?
---------------------------------------------------
Snoopy sagt - [email protected] find ich gut...
Schon gesehen? OSMMapViewer V2 Control

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateipfad auf bestimmte Länge (in Pixel) kürzen 
Autor: keco
Datum: 27.03.10 18:46

Das mit dem ToolTip habe ich bereits, danke.

Auch danke an VB.NET2005 für die Idee.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2023 [email protected] Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel