Avatar billede bramsing Nybegynder
06. juni 2003 - 22:44 Der er 10 kommentarer og
1 løsning

Afkortning af en vist sti

Hejsa..

Er der en der ved hvordan man kan "afkorte" en vist sti??

Ex.
Når jeg klikker på en folder i TShellListViewbliver stien skrevet ned i en label

(C:\WINNT\system32\spool\drivers\w32x86\Win32\)

Men i stedet ville jeg gerne have at der skal skrives:
C:\WINNT\...\...\...\...\Win32\

Nogen der har en idé??

Med venlig hilsen
//'bramsing'
Avatar billede dkn Nybegynder
06. juni 2003 - 23:10 #1
function KortPadIn(Pad: string; maxL: Integer): string;
const
  start            = 6;
  MinFileL          = 12;
var
  TempPad          : string;
  Lfile            : Integer;
  i                : Integer;
begin
  if (length(Pad) > maxL) and (maxL > (start + MinFileL)) then
  begin
    Lfile := Length(Pad);
    for i := Length(Pad) downto 0 do
      if Pad[i] = '\' then
      begin
        Lfile := Length(Pad) - i;
        Break;
      end;

    if (Lfile + start) >= maxL then
      TempPad := copy(Pad, length(Pad) - Lfile, 255)
    else
      TempPad := copy(Pad, length(Pad) - maxL + start, 255);

    if (length(TempPad) - Lfile) > 1 then
      for i := 1 to (length(TempPad) - Lfile) do
        if TempPad[i] = '\' then
        begin
          {copy everything after the first '\' from the left}
          TempPad := copy(TempPad, i, 255);
          Break;
        end;
    TempPad := copy(Pad, 1, 3) + '...' + TempPad;
    KortPadIn := TempPad;
  end else
    KortPadIn := Pad;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(KortPadIn(application.ExeName, 30));
end;
Avatar billede bramsing Nybegynder
07. juni 2003 - 00:05 #2
Tak for det dkn... Det virker... Men hvis det nu kun er en folder man klikker på virker det ikke... Det er først når det det er en fil man klikker på... Kan det også laves så det virker såvel på filer som på folder???
Avatar billede dkn Nybegynder
07. juni 2003 - 01:29 #3
een folder? det skal jeg lige høre lidt mere om hvad du mener med...
Avatar billede borrisholt Novice
08. juni 2003 - 11:47 #4
Er det ikke blot nemmere at bruge funktionen MinimizeName, som Borland har lavet ?

Jens B
Avatar billede borrisholt Novice
08. juni 2003 - 11:48 #5
fx :

Label13.Caption := ' : ' + MinimizeName(FileName, Canvas, 250);

Jens B
Avatar billede dkn Nybegynder
08. juni 2003 - 16:16 #6
jo jens det kunne da godt ske, kendte heller ikke den function.
Tror bare det er nemmere at forholde sig til lengten af chars istedet for hvor mange pixels der går på en char.
Avatar billede borrisholt Novice
08. juni 2003 - 16:17 #7
Ja jo .. Men typisk har man jo kun begrænset plads ....

Jens B
Avatar billede dkn Nybegynder
08. juni 2003 - 16:32 #8
Ja det problem løser begge functions jo :) bare på hver sin måde...

Men fremover vil jeg da nok vælge MinimizeName() og så i paramenteren maxlen må man jo bare bruge Canvas.TextWidth('Sin text') så har man jo samme resultat som den anden function.

dkn
Avatar billede bramsing Nybegynder
08. juni 2003 - 18:51 #9
Tussind tak for hjælpen Jens B og undskyld jeg først svare nu... men jeg har været lidt ophængt her i pinsen...

Den kan lige det jeg skulle have den til...
Du må lige sige til hvis du vil have point for den ;)

Også tak til dkn for hans del af hjælpen ;)

//'bramsing'
Avatar billede borrisholt Novice
08. juni 2003 - 18:56 #10
Nå nej pyt med dem .. Jeg tror jeg har :-)
Avatar billede bramsing Nybegynder
08. juni 2003 - 19:21 #11
ok Jens B ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester