Вниз
Скачать: CL | DM;

Сократить имя файла   Найти похожие ветки 

← →
Вадим ©   (2004-04-15 00:01) [0]

Здравствуйте.

Возникла следующая проблема. Емеем путь к файлу, например:  c:\program files\super\puper\soft\rulez\forever\superpuperapplication.exe

Этот путь необходимо сократить до определенного кол-ва символов. Вернее, чтобы путь не превышал определенное количество символов.
Например: c:\program files\...\forever\superpuperapplication.exe

Как лучше это сделать? Кто-нибудь встречал подобную функцию? Пробовал писать сам. Вроде получилось, но только вроде. Иногда виснет, так и не смог понять в каком случае.

Спасибо за внимание.


← →
Andy BitOff ©   (2004-04-15 00:21) [1]

Так ты покажи чего получилось.


← →
Вадим ©   (2004-04-15 00:43) [2]


> Andy BitOff ©   (15.04.04 00:21) [1]


Думаю, что лучше поискать готовую функцию (тем более давным-давно я ее уже где-то видел), чем разбираться в неработающем коде.


← →
Andy BitOff ©   (2004-04-15 00:45) [3]

Ищи.


← →
Rouse_ ©   (2004-04-15 00:46) [4]

Тебе именно твой вариант нужен или GetShortPathName устроит?


← →
Anatoly Podgoretsky ©   (2004-04-15 00:53) [5]

Ему функция эллипс нужна, вот только не помню в какой она библиотеке и как называется.


← →
Вадим ©   (2004-04-15 00:57) [6]


> Rouse_ ©   (15.04.04 00:46) [4]
> Тебе именно твой вариант нужен или GetShortPathName устроит?


Нет, этот вариант не подойдет.


← →
Игорь Шевченко ©   (2004-04-15 00:57) [7]

например

DrawText (....DT_PATH_ELLIPSIS or DT_MODIFYSTRING)


← →
Rouse_ ©   (2004-04-15 01:09) [8]

Ну тогда вот лови, заняло около 5 минут...

// Параметры
// Value - сама строка
// StartSlash - кол-во слэшей от начала
// EndSlash - кол-во слэшей от конца
function Demo(const Value: String; const StartSlash, EndSlash: Byte): String;
const
 STR_SLASH = "\";
 STR_TRIPLE = "...";
var
 BeforePart, AfterPart: String;
 I: Cardinal;
 Counter: Byte;
begin
 Counter := 0;
 I := 1;
 while Counter < StartSlash do
 begin
   if Value[I] <> STR_SLASH then
   begin
     BeforePart := BeforePart + Value[I];
     Inc(I);
   end
   else
   begin
     Inc(Counter);
     BeforePart := BeforePart + Value[I];
     Inc(I);
   end;
 end;

 Counter := 0;
 I := Length(Value);
 while Counter < EndSlash do
 begin
   if Value[I] <> STR_SLASH then
   begin
     AfterPart := Value[I] + AfterPart;
     Dec(I);
   end
   else
   begin
     Inc(Counter);
     AfterPart := Value[I] + AfterPart;
     Dec(I);
   end;
 end;
 Result := BeforePart + STR_TRIPLE + AfterPart;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Caption := Demo("c:\program files\super\puper\soft\rulez\forever\superpuperapplication.exe",
   2, 2);
end;


← →
Rouse_ ©   (2004-04-15 01:18) [9]

Проверки на кол-во слэшей и зашлест друг за друга сам встроишь :)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.021 c
1-1081933960
LameFox
2004-04-14 13:12
2004.05.02
Не пашет Image1.Picture.LoadFromFile(...);


4-1078199427
Lefan
2004-03-02 06:50
2004.05.02
Взять HTML из чужого приложения...


3-1081346919
Koba
2004-04-07 18:08
2004.05.02
Базы данных


8-1074764725
Yasik
2004-01-22 12:45
2004.05.02
Конвертация


4-1079038077
ZedeS
2004-03-11 23:47
2004.05.02
отследить запуск другой программы




   Наверх