Tipp 8.14 - Dateipfad individuell kürzen

Wie kann man einen langen Dateipfad auf eine bestimmte Maximalanzahl Zeichen verkürzen?

Hintergrund: es gibt viele Routinen, die einen Pfad auf eine bestimmte Länge in Pixel auf Basis einer Textbox oder eines Labels kürzen.

Diese Routine funktioniert unabhängig von irgendwelchen Controls - es muss lediglich die gewünschte Maximalanzahl Zeichen übergeben werden. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.

Api-AufrufeVerwendete Win32-Api-Aufrufe und Typen: PathCompactPathExA, lstrlenW

Beispiel:

Option Explicit
 
Private Const MAX_PATH As Long = 260
 
Private Declare Function PathCompactPathEx Lib "shlwapi.dll" Alias _
                        "PathCompactPathExA" _
                        (ByVal pszOut As String, _
                         ByVal pszSrc As String, _
                         ByVal cchMax As Long, _
                         ByVal dwFlags As Long) As Long
Private Declare Function lstrlenW Lib "kernel32" _
                        (ByVal lpString As Long) As Long
 
 
 
Public Function CompactPath(ByVal sPath As String, _
                            ByVal lMaxLen As Long) As String
'// =====================================================
'// Methode   | "Schneidet" einen Pfad auf die gewünschte
'//           | Länge (= Anzahl Zeichen)
'// -----------------------------------------------------
'// Parameter | sPath - der gesamte Pfad
'//           | lMaxLen - Maximallänge des Pfades
'// -----------------------------------------------------
'// Rückgabe  | gekürzte Pfad
'// -----------------------------------------------------
'// Erstellt  | Stefan Kulpa
'//           | EDV Innovation & Consulting - Dormagen
'// -----------------------------------------------------
'// Beispiel  |?CompactPath("C:\Dokumente und Einstellungen\All Users
'//                         \Startmenü\Programme\Zubehör\Editor.lnk", 20)
'//          =  C:\Dok...\Editor.lnk
'// =====================================================
    Dim lResult As Long
    Dim sBuffer As String
 
    lMaxLen = lMaxLen + 1
    sBuffer = Space$(MAX_PATH)
    lResult = PathCompactPathEx(sBuffer, sPath, lMaxLen, 0&)
    CompactPath = Left$(sBuffer, lstrlenW(StrPtr(sBuffer)))
 
End Function

VoraussetzungenVoraussetzungen: Windows 2000 oder höher (oder Windows NT 4.0 mit Internet Explorer 4.0 oder höher).Windows 98/ME (oder Windows 95 mit Internet Explorer 4.0 oder höher).