Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.037 c
4-1117958389
SergeyGood
2005-06-05 11:59
2005.07.31
WinAPI GetVersionEx


3-1119696331
serguncho
2005-06-25 14:45
2005.07.31
Пару вопросов по Firebird


14-1120501263
i-s-v
2005-07-04 22:21
2005.07.31
Что слушаем?


3-1118252501
Lexa
2005-06-08 21:41
2005.07.31
Could not convert variant of type (Null) into type (String)


4-1117733649
MacRine
2005-06-02 21:34
2005.07.31
Как получить список программ свернутых в SysTray?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский