Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сокращение пути, в лэйбл 
:(
    Опции темы
Akella
Дата 19.1.2005, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



все понял, у меня Label большой слишком smile smile

Это сообщение отредактировал(а) dsergey - 19.1.2005, 16:49
PM MAIL   Вверх
Snowy
Дата 19.1.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Ну и что не так? Если в лабел все влезает, то почему бы и нет?
Добавлено @ 16:51
Ну вот, не успеешь ответить, а он уже вопрос ликвидировал :-)
PM MAIL   Вверх
Akella
Дата 19.1.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(z @ 19.1.2005, 16:33)
И самое, главное онное всегда урезает путь, причем до минимума: первая папка и последняя вложенная.
А надо:


Цитата (z-END @ 19.1.2005, 15:26)
надо, а так чтобы затроеточивалсь столько сколько не влазит (в пределах папки) в лабел

и не больше.


Да ради Бога, добавь проверку и все Ok
PM MAIL   Вверх
Rennigth
Дата 19.1.2005, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



хехе, пока обедал уже все... smile
Snowy
йоу? у меня примерно тоже самое получилось(сам принцип).
хехехе ради прикола, поднял код который писал лет 5-6 назад - извините за выражение "ссал кипятком", но самое интересное этот код работает в утилитке которой сам до сих пор пульзуюсь. smile
ВОТ ОНО:
Код

procedure SmallPath(inpath:string;var outpath:string;count:word);
var
 i,k,tmpendpath,endpath:word;
begin
 setstring(outpath,nil,count);
 outpath:=StringOfChar(' ',count);
 if length(inpath)>count then begin
   i:=length(inpath);
   while inpath[i]<>'\' do
     dec(i);
   endpath:=length(inpath)-i;
   if endpath+7+1>count then
     endpath:=count-8-3
                        else begin
     repeat
       tmpendpath:=endpath;
       repeat
         inc(endpath);
       until inpath[length(inpath)-endpath]='\';
     until endpath+1+7>count;
     if endpath+1+7>count then
       endpath:=tmpendpath;
   end;
   for i:=0 to 3 do
     outpath[i]:=inpath[i];
   for i:=4 to 6 do
     outpath[i]:='.';
   outpath[7]:='\';
   for i:=8 to 10 do
     outpath[i]:='.';
   k:=0;
   for i:=length(inpath) downto length(inpath)-endpath do begin
     outpath[endpath+7-k]:=inpath[i];
     inc(k);
   end;
 end else
   outpath:=inpath;
end;



PS: без коментариев smile


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Akella
Дата 19.1.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



z-END, выбирай на любой вкус smile smile
PM MAIL   Вверх
z-END
Дата 19.1.2005, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



dsergey, Rennigth, Snowy Господа всем спасибоsmile
решил использовать метод от Snowy , но все-же с разочарованием, т.к. мне очень кажется что для этого есть какая-нть APIшная ф-ция типа Text_ellipsis... ну да ладно
Еще раз сенькю всем=)



--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Akella
Дата 19.1.2005, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(z @ 19.1.2005, 17:40)
мне очень кажется что для этого есть какая-нть APIшная ф-ция типа Text_ellipsis...

здается, что наверное есть такая функция
Задай-ка такой же вопрос в теме WinAPI smile
PM MAIL   Вверх
Dynamic
Дата 20.1.2005, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 12
Всего: 15



Вот, откопал:
Код

function DrawText(hDC: HDC; lpString: PChar; nCount: Integer;
 var lpRect: TRect; uFormat: UINT): Integer;
Цитата

uFormat:

DT_BOTTOM - Выцводимый текст выравнивается на нижнему краю.
  DT_CENTER - Выводимый текст выравнивается по правому краю
  DT_END_ELLIPSIS - Если строка не помещается в lpRect, ее конец заменяется на три точки. Это бывает удобно использовать для вывода полей, имеющих значительную длину
  DT_LEFT - Выводимый текст выравнивается по левому краю
  DT_PATH_ELLIPSIS - Используется с путями, содержащими символ ‘\’. Если строка не помещается в lpRect, то часть ее из середины заменяется на три точки

  DT_RIGHT - Выводимый текст выравнивается по центру
  DT_SINGLELINE - Текст выводится в одну строку, при этом игнорируются символы перевода строки и возврата каретки. С данным флагом могут комбинироваться DT_TOP, DT_BOTTOM и DT_VCENTER, задающие вертикальное выравнивание текста
  DT_TOP - Выцводимый текст выравнивается на верхнему краю.
  DT_WORDBREAK - Текст разбивается на строки так, чтобы он поместился по ширине в прямоугольнике lpRect. Символы возврата каретки и перевода строки также приводят к переходу на новую строку



--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Akella
Дата 21.1.2005, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Dynamic, а мы тут головы ломали, а люди уже давно на велосипеде smile
PM MAIL   Вверх
Dynamic
Дата 21.1.2005, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 12
Всего: 15



Когда вопрос появился и я поначалу голову ломал, а потом тоже подумал
Цитата(z @ 19.1.2005, 17:40)
мне очень кажется что для этого есть какая-нть APIшная ф-ция типа Text_ellipsis...

вот и результат smile


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
z-END
Дата 23.1.2005, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Dynamic это код из DRKB, если я не ошибаюсь=)
мой первый пост:
Цитата(z @ 19.1.2005, 14:21)
В DRKB нашел код который позволяет рисовать так на канаве, а мине эт не подходит. надо именно получить текст

smile


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Dynamic
Дата 23.1.2005, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 12
Всего: 15



Да, я уже подумал об этом. Каюсь, увлекся.........
У меня нет DRKB, но есть DelphiWorld, не думаю, что между ними большая разница, почти весь код я взял оттуда.
Насчет вопроса, признаю, надо поработать еще smile


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Alex
Дата 23.1.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Ни один человек поиском не воспользовался, а все дружно стали изобретать велосипед http://forum.vingrad.ru/index.php?showtopi...ctfileshortpath smile


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Dynamic
Дата 24.1.2005, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 12
Всего: 15



имхо, решение от Snowy лучшее, только нужна маленькая поправочка, иначе зацикливается при слишком маленьком Label.Width.
Код

procedure PlaceText(s:string; L:TLabel);
var
i: integer; //позиция, куда ставить точки
dots: integer; // ширина, которую точки займет на лабеле
begin
if L.Canvas.TextWidth(s)>L.Width then //если не влазит
begin
  i:=LastDelimiter('\', s);
  dots:=L.Canvas.TextWidth('...');
  if L.Width < dots then exit;     // если слишком маленький L.Width
  if L.Width L.Width do //вырезаем по символу, пока не влезет
  begin
    if i>1 then dec(i) else i:=1;
    delete(s,i,1);
  end;
  while (i>1) do begin
    if s[i-1]='\' then break;
    if i>1 then dec(i) else i:=1;
    delete(s,i,1);
  end;
  if i>1 then insert('...',s,i); //вставляем точки
end;
L.Caption:=s;
end;

Можно в ФАК помещать.


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Snowy
Дата 24.1.2005, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Не совсем так. Я же писал:
Цитата

Размер лабела не должен быть меньше '...' + хотя бы одна буква!

Если и делать проверку, то хотя бы на <dot*2, иначе зациклится при значении = dot или >dot, но меньше dot+буква.
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.