DirLabel, a dowolny Label...

0

Witam...

Pracuje w D2. Byc moze moj problem jest banalny, ale nie wiem jak go rozwiazac. :(

A mianowicie jak uzyskac identyczny efekt w dowolnym Labelu, jak to ma miejsce w przyapdku przypisania Labela do DirectoryListBox, - tzn chodzi mi o efekt ucinania dlugich sciezek, a raczej ich wykropkowanie (np. C:\...\...\Programy)?

Zalezy mi na tym, aby dowolny Label o konkretniej dlugosci zawsze przycinal w ten sposob dowolny tekst bedacy sciezka do jakiegos pliku ale nie pochodzaca z DirectoryListBox.
Czyli dla przykladu Label ma wlasciwosc Width := 125 i Caption := 'C:\Windows\System\IoSysbus\Test\plik.exe'. Jak uzyskac efekt na Labelu: C:\...\...\IoSysbus\Test\plik.exe lub C:\...\...\...\Test\plik.exe ?


/Po pierwsze: nie slash, a backslash, a po drugie - czytaj wątki przeznaczone dla nowych użytkowników forum - zamiast pisz i bedzie OK - m.M/
Do uwagi: thx - jak widac poprawilem. Niesforny ze mnie newb tego forum - przepraszam...

Pls - jesli ktos zna rozwiazanie tego problemu to bede niezmiernie zobowiazany za pomoc.

Pozdrawiam

0

To może nie jest najefektywniejsze rozwiązanie, ale spróbuję pomóc...;p

function CutName(Path: String): String;
var S1, S2, S3: String;
I: Integer;
begin
if not (Path[2]+Path[3]=':') then begin //Path nie jest ścieżką dostępu
CutName:=Path;
Abort; // Nie jestem pewien, czy tu winien być Abort, czy coś innego
end;
S1:=Path;
S2:=S1[1]+':';
Delete(S1, 1, 3);
While pos('', S1)>0 do begin
S3:=Copy(S1, 1, pos('', S1)-1);
Delete(S1, 1, pos('', S1));
if pos(, S1)=0 then S2:=S2+S3++S1 else S2:=S2+'...';
end;
CutName:=S2;
end;

P.S. Pisałem z pamięci, więc jak jest jakiś błąd, to mnie popraw...

0

Nie wiem, czy w D2 jest taka funkcja:

function MinimizeName(const Filename: TFileName; Canvas: TCanvas; MaxLen: Integer): TFileName;

W D7 ona wlasnie do tego sluzy

0

To może nie jest najefektywniejsze rozwiązanie, ale spróbuję pomóc...;p

function CutName(Path: String): String;
var S1, S2, S3: String;
I: Integer;
begin
if not (Path[2]+Path[3]=':') then begin //Path nie jest ścieżką dostępu
CutName:=Path;
Abort; // Nie jestem pewien, czy tu winien być Abort, czy coś innego
end;
S1:=Path;
S2:=S1[1]+':';
Delete(S1, 1, 3);
While pos('', S1)>0 do begin
S3:=Copy(S1, 1, pos('', S1)-1);
Delete(S1, 1, pos('', S1));
if pos(, S1)=0 then S2:=S2+S3++S1 else S2:=S2+'...';
end;
CutName:=S2;
end;

P.S. Pisałem z pamięci, więc jak jest jakiś błąd, to mnie popraw...

Mniej więcej o to chodzi ale nie do końca. :( Głównie zależy mi na tym, aby ilość wielokropków uzależnić od szerokości Labela, ale jak to zrobić to nie mam zielonego pojęcia. :(

Nie wiem, czy w D2 jest taka funkcja:

function MinimizeName(const Filename: TFileName; Canvas: TCanvas; MaxLen: Integer): TFileName;

W D7 ona wlasnie do tego sluzy

Niestety nie ma... ech...

Może ktoś jeszcze borykał się kiedyś z takim problemem i zna rozwiązanie?

0

Mniej więcej o to chodzi ale nie do końca. :( Głównie zależy mi na tym, aby ilość wielokropków uzależnić od szerokości Labela, ale jak to zrobić to nie mam zielonego pojęcia. :(

Hmm... z tym może być mały problem... Bo ta szerokość Labela to zależy od tego, jaką czcionką piszesz, jaką wielkością, czy jest bold czy nie, itp.,itd.
Wydaje mi się, że to by trzeba było jakoś wstawiać do labela, z ustawioną właściwością AutoSize i porównywać z żądaną szerokością... Jak?<font color="red"> Nie stety </span>nie przychodzi mi nic do głowy :(

0

Wydaje mi się, że to by trzeba było jakoś wstawiać do labela, z ustawioną właściwością AutoSize i porównywać z żądaną szerokością...

jak sprawdzić szerokość (w pikselach) wybranego tekstu w zależności od jego atrybutów ? -->

canvas.Font := ...
canvas.TextWidth(...)

1 użytkowników online, w tym zalogowanych: 0, gości: 1