Форум: "WinAPI";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];
ВнизФункция преобразования длинного пути в короткий Найти похожие ветки
← →
Koan (2005-06-05 15:36) [0]Здравствуйте,
Интересует функция(стандартная или API) делающая:"C:\Program Files\Delphi\DDrop\TargetDemo\main.pas"
"C:\Program Files\..\main.pas"
Если нет то сам напишу. Интерисует именно готовая.
← →
rOOse © (2005-06-05 15:43) [1]GetShortPathName
← →
Koan (2005-06-05 15:52) [2]Не совсем то. Вот что она сделала:
E:\My_Practice\Delphi\ShortFilePath\Project1.exe
E:\MY_PRA~1\Delphi\SHORTF~1\Project1.exe
Хотелось быE:\My_Practice\..\Project1.exe
← →
begin...end © (2005-06-05 15:55) [3]> Koan
Это нужно для последующего вывода сокращённого пути на канву?
← →
Abessalom (2005-06-05 15:56) [4]var
P: PChar;
R: TRect;
begin
P := AllocMem(Length(s) + 1);
StrCopy(P, PChar(s));
SetRect(R, 10, 10, 100, 25);
DrawText(Canvas.Handle, P, Length(s), R,
DT_SINGLELINE or DT_CALCRECT or DT_LEFT or DT_MODIFYSTRING or DT_PATH_ELLIPSIS);
Caption := P;
FreeMem(P);
end;
← →
rOOse © (2005-06-05 15:57) [5]сам пиши
← →
Abessalom (2005-06-05 15:58) [6]Т.е. необходим комментарий. Ф-я DrawText форматирует строку Р, в соответствии с параметром DT_MODIFYSTRING or DT_PATH_ELLIPSIS. Параметр DT_CALCRECT предотрващает вывод на канву. Результат формально установлен для Caption := P;
← →
Koan (2005-06-05 16:00) [7]
> Это нужно для последующего вывода сокращённого пути на канву?
Не очень понял вопрос. По идее нет наверно. Просто из строкиS := "E:\My_Practice\Delphi\ShortFilePath\Project1.exe"
Хочу получитьS1 := "E:\My_Practice\..\Project1.exe
А к чему это вы?
← →
Koan (2005-06-05 16:02) [8]Koan = Kolan
← →
begin...end © (2005-06-05 16:04) [9]> Koan (05.06.05 16:00) [7]
> А к чему это вы?
Это я к [4].
← →
Kolan © (2005-06-05 16:08) [10]Ну как я понял это не совсем то. Зачем DrawText если надо просто строку преобразовать.
Ктомуже результат:E:\...\Project1.exe
Опять не совсем то.
← →
begin...end © (2005-06-05 16:10) [11]> Kolan © (05.06.05 16:08) [10]
Тогда самому писать.
← →
Kolan © (2005-06-05 17:02) [12]Вроде работает
function TForm1.GetDotShortFilePath(FilePath: string): string;
var
DelimetersCount, SecondDelimeter: Integer;
I: Integer;
begin
DelimetersCount := 0;
SecondDelimeter := 0;
for I := 1 to Length(FilePath) do
begin
if FilePath[I] = "\" then
DelimetersCount := DelimetersCount + 1;
if (DelimetersCount = 2) and (SecondDelimeter = 0) then
SecondDelimeter := I;
if DelimetersCount >= 3 then
Break;
end;
if DelimetersCount >= 3 then
begin
Result := Copy(FilePath, 1, SecondDelimeter) + "..\" + ExtractFileName(FilePath);
end
else
Result := FilePath;
end;
А что делаетExtractRelativePath
Что-то непонял.
← →
Abessalom (2005-06-05 18:15) [13]
> Зачем DrawText если надо просто строку преобразовать
Эта функция именно преобразует строку.
SetRect(R, 10, 10, 150, 25);
и будет тебе счастье в виде C:\Program Files\..\main.pas. Жаль на форуме нельзя скриншот показать. Параметр R просто нужно правильно трактовать. Если, например, тебе нужно отобразить этот текст в каком-либо элементе управления, все что нужно сделать, это передать его ClientRect в качестве R + DC его канвы в функцию - она определит разрывы (/.../) строки с учетом отображения текста на конкретном DC с конкретными параметрами текста. Чем больше ширина прямоугольника, тем меньше вырежет и наоборот. Результаты надо анализировать хоть чуть.
Однако если тебе желательно просто вырезать кусок (не представляю цели отличной от той, для чего предназначена D..T..), тогда все верно, каждому своя проблема.
Щисливаго праграминья
← →
Abessalom (2005-06-05 18:20) [14]
> ExtractRelativePath
Извлекает относительный путь к файлу
Caption := ExtractRelativePath(Application.ExeName, ExtractFileDir(ExtractFileDir(Application.ExeName)))
← →
Kolan © (2005-06-05 18:25) [15]
> Abessalom (05.06.05 18:15) [13]
> все что нужно сделать, это передать его ClientRect
Всё теперь понял. Отлично работает. :)
← →
Abessalom (2005-06-05 18:43) [16]
> Kolan © (05.06.05 18:25) [15]
Ну,)
← →
BiN © (2005-06-06 09:20) [17]
Koan (05.06.05 15:36)
Здравствуйте,
Интересует функция(стандартная или API) делающая:
PathCompactPath(Ex) из shlwapi.dll
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c