Announcement

Collapse
No announcement yet.

String auf bestimmte Länge beschneiden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • String auf bestimmte Länge beschneiden

    Hallo,

    ich möchte gerne einen String (Dateinamen inkl. Pfad) auf eine bestimmte Länge beschneiden. Aber es soll vor dem letzen Backslash mit drei Punkten aufgefüllt werden. Also z.B. so wie es WORD mit seiner File-History macht.

    BSP: C:\Winnt\system32\test.txt zu
    C:\Winnt\...\test.txt

  • #2
    Hallo,<br>
    würde ich irgendwie so machen....<br>
    <pre>
    function CutString(s:string; maxLength:integer):string;
    var SL:TStringList; resLen, i:integer;
    begin
    SL:=TStringList.create;
    SL.Text:=StringReplace(s,'\',#13#10,[rfReplaceAll]);
    result:='...\'+SL.Strings[SL.Count-1];
    resLen:=Length(result);
    i:=0
    while (i<SL.Count-1) and (resLen+Length(SL.Strings[i]+'\')<=maxLength) do
    begin
    result:=SL.Strings[i]+'\'+result;
    resLen:=length(result);
    inc(i);
    end;
    SL.Free;
    end;
    </pre>

    Ich habe das jetzt so aus dem Kopf gecodet, könnte also durchaus sein, daß ich mit den Inidizes da durcheinander gekommen bin, aber vom Prinzip her funktioniert das auf jeden Fall

    Comment


    • #3
      Wenn's dir nur um eine platzsparende Darstellung geht, kannst du vielleicht DrawText mit DT_PATH_ELLIPSIS nehmen.
      <br>Uli

      Comment


      • #4
        Hallo,

        die Funktion "MinimizeName" in Unit FileCtrl macht genau das, was Du willst (allerdings weiß ich gerade nicht, ob die ... vor dem letzten Backslash eingefügt werden, oder nach dem ersten):

        <PRE>
        function MinimizeName(const Filename: TFileName; Canvas: TCanvas; MaxLen: Integer): TFileName;
        </PRE>

        Details in der Online-Hilfe.

        Gruß, Werne

        Comment


        • #5
          Vielen Dank an alle.

          MinimizeName funktioniert wunderbar..

          Comment

          Working...
          X