Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизСократить имя файла Найти похожие ветки
← →
Вадим © (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 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c