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

Функция преобразования длинного пути в короткий   Найти похожие ветки 

← →
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 вся ветка

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



Память: 0.48 MB
Время: 0.029 c
3-1118902201
Гость2
2005-06-16 10:10
2005.07.31
Вопрос по SQl (2)


1-1121367415
redlord
2005-07-14 22:56
2005.07.31
максимальная длинна пути к файлу


6-1113844381
ALex B.
2005-04-18 21:13
2005.07.31
Как узнать какой доступ к шаре(под паролем, полный доступ)?


1-1121022378
Dadhi
2005-07-10 23:06
2005.07.31
Аналог Mem в Делфи


6-1113992960
zorik
2005-04-20 14:29
2005.07.31
Как узнать значение параметра (cgi-приложение)




   Наверх