Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как усечь слева подкаталоги? Если строка не вмещается. 
V
    Опции темы
GremlinProg
Дата 15.5.2009, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



по крайней мере, можно просто учесть шрифт:
Код

...
hOldFont   = ::GetCurrentObject(hdc,OBJ_FONT);
hFont = (HFONT)::SendMessage(hwndStatic,WM_GETFONT);
::SelectObject(hdc,hFont);
// ...использовать hdc...
::SelectObject(hdc,hOldFont);
...

тогда пойдет любой HDC, хоть десктопа: GetDC(HWND_DESKTOP)

Добавлено через 3 минуты и 49 секунд
Цитата(artsb @  15.5.2009,  20:56 Найти цитируемый пост)
Скорее всего она учитывает шрифт...

да нет, ей в принципе без разницы на чем рисовать
шрифт с окна функции GDI сами не устанавливают,
иначе мы не могли бы его сменить, кроме как явной посылкой WM_SETFONT


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
artsb
Дата 15.5.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 5
Всего: 64



Вот:
Код

AnsiString EllipsisPath(const AnsiString &asString, TFont *fParentFont, int iParentWidth, TCanvas *cCanvas)
{
AnsiString asNewString = asString;
TFont *fTempFont = cCanvas->Font;
cCanvas->Font->Assign(fParentFont);
if(iParentWidth < cCanvas->TextWidth(asNewString))
{
  while(iParentWidth < cCanvas->TextWidth("..." + asNewString))
    asNewString.Delete(1, 1);
  asNewString = "..." + asNewString;
}
cCanvas->Font->Assign(fTempFont);
return asNewString;
}

// юзать можно так
StaticText1->Caption = EllipsisPath(Edit1->Text, StaticText1->Font, StaticText1->BoundsRect.Width(), this->Canvas);

Конечно можно было создать объект канвы в функции и юзать его, но это же время и ресурсы smile

ЗЫ не смотря на то, что это изврат, не бейте сильно smile


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
GremlinProg
Дата 15.5.2009, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(artsb @  15.5.2009,  21:11 Найти цитируемый пост)

while(iParentWidth < cCanvas->TextWidth("..." + asNewString))
    asNewString.Delete(1, 1);
    asNewString = "..." + asNewString;

это делает DrawText с флагом DT_END_ELLIPSIS или пословно, с флагом DT_WORD_ELLIPSIS
только не "три точки", а "троеточие", одним символом

Добавлено через 1 минуту и 59 секунд
а, ну да, не заметил, не последние, а первые символы
но в любом случае, это не задача топика


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
artsb
Дата 15.5.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 5
Всего: 64



Цитата(GremlinProg @  15.5.2009,  19:17 Найти цитируемый пост)
это не задача топика 

Цитата

Как усечь слева подкаталоги? Если строка не вмещается.

Или я не правильно понял?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
GremlinProg
Дата 15.5.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(artsb @  15.5.2009,  21:44 Найти цитируемый пост)
Или я не правильно понял?

Цитата(artsb @  15.5.2009,  21:44 Найти цитируемый пост)
Как усечь слева подкаталоги? Если строка не вмещается.

не символы, а подкаталоги:
Код

С:\усеченный\...\путь\до\файла

два варианта уже предложены


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
artsb
Дата 15.5.2009, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 5
Всего: 64



Изначально я думал, что нужно получить строку вида:
Код

...\путь\до\файла

Если это так, то ничего не мешает добавить в моей функции пару строк: smile
Код

AnsiString EllipsisPath(const AnsiString &asString, TFont *fParentFont, int iParentWidth, TCanvas *cCanvas)
{
AnsiString asNewString = asString;
TFont *fTempFont = cCanvas->Font;
cCanvas->Font->Assign(fParentFont);
if(iParentWidth < cCanvas->TextWidth(asNewString))
{
  while(iParentWidth < cCanvas->TextWidth("..." + asNewString))
    asNewString.Delete(1, 1);
  int iPos = asNewString.Pos("\\");
  if(iPos)
    asNewString.Delete(1, iPos - 1);
  else if((iPos = asNewString.Pos("/")))
    asNewString.Delete(1, iPos - 1);
  asNewString = "..." + asNewString;
}
cCanvas->Font->Assign(fTempFont);
return asNewString;
}


Если же нужен такой вариант как написал GremlinProg, то как мне кажется, DrawText будет в самый раз  smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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