Вниз
Скачать: 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.022 c
3-1118581333
parasolka
2005-06-12 17:02
2005.07.31
Как вставить время в таблицу.


14-1120733248
Aladin23
2005-07-07 14:47
2005.07.31
Где взять компонент эффектного появления окна?


6-1114022677
Ospa
2005-04-20 22:44
2005.07.31
TidPop3 tidsmtp


6-1113987837
MegaVolt
2005-04-20 13:03
2005.07.31
Как исспользовать SendARP под Win 98?


1-1121191737
SpyBoy
2005-07-12 22:08
2005.07.31
Hook или как?




   Наверх