Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стандартная функция усечения строки 
V
    Опции темы
Comm
Дата 24.2.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 1



Добрый вечер Всем)

Есть ли в Buildere стандартная функция усечения строки(если она не помещается на выделенный кусок канвы) с добавлением в конец строки многоточия ?

Я конечно понимаю что это не трудно написать эту функцию самому,но это оставим на случай если стандартной похожей функции нет.

Спасибо за внимание.


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
mrbrooks
Дата 25.2.2009, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

Репутация: 167
Всего: 306



Цитата(Comm @  24.2.2009,  20:39 Найти цитируемый пост)
Есть ли в Buildere стандартная функция усечения строки(если она не помещается на выделенный кусок канвы) с добавлением в конец строки многоточия ?

Такой не встречал. Делай руками камрад  smile 
PM MAIL   Вверх
TiKKi
Дата 25.2.2009, 09:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 1
Всего: 2



Win32 API - DrawText
PM   Вверх
Alca
Дата 25.2.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 25
Всего: 50



Код

StatusBar1->SimpleText = MinimizeName(asFilePath, StatusBar1->Canvas, 120);


Это сообщение отредактировал(а) Alca - 25.2.2009, 10:36


--------------------
PM WWW ICQ Skype Jabber   Вверх
dix75
Дата 25.2.2009, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



Alca
чето я не понял как она работает

Код

Label1->Caption = MinimizeName("asFilePa555555555555555555555555555555555555555555555555th", Label1->Canvas, 5);


эффекта ноль

Ясно эта функция работает если есть обратные слэши в строке :(

Это сообщение отредактировал(а) dix75 - 25.2.2009, 11:15


--------------------
save your mind
PM MAIL   Вверх
Alca
Дата 25.2.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 25
Всего: 50



Делай руками камрад  smile 
Что-то вроде этого:
Код

//---------------------------------------------------------------------------
std::string sMinimizeFileName(const std::string &csStr, const unsigned int cuiMaxLen) {    
    //-------------------------------------
    //CHECK
    if (true == csStr.empty()) {
        return std::string("");
    }

    //-------------------------------------
    //JOB
    std::string sRes("");
    std::string sTildaDotExt      = "~." + sExtractFileExt(csStr);
    size_t      uiTildaDotExtSize = sTildaDotExt.size();

    if (csStr.size() > cuiMaxLen) {
        if (cuiMaxLen < uiTildaDotExtSize) {
            sRes = csStr.substr(0, cuiMaxLen);
        } else {
            sRes = csStr.substr(0, cuiMaxLen - uiTildaDotExtSize) + sTildaDotExt;
        }
    } else {
        sRes = csStr;
    }

    return sRes;
}
//---------------------------------------------------------------------------


Это сообщение отредактировал(а) Alca - 25.2.2009, 11:29


--------------------
PM WWW ICQ Skype Jabber   Вверх
dix75
Дата 25.2.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



Alca
это понятно, спасибо.
а если просто строку обрезать, она не обязательно слэш содержит, а?


--------------------
save your mind
PM MAIL   Вверх
Alca
Дата 25.2.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 25
Всего: 50



Код

AnsiString asStr = "11111111111";
asStr.SetLength(5);


Это сообщение отредактировал(а) Alca - 25.2.2009, 11:30


--------------------
PM WWW ICQ Skype Jabber   Вверх
dix75
Дата 25.2.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



Alca
так это размер нуна знать


--------------------
save your mind
PM MAIL   Вверх
Alca
Дата 25.2.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 25
Всего: 50



Посмотри исходники MinimizeName. И сделай по аналогии.


--------------------
PM WWW ICQ Skype Jabber   Вверх
dix75
Дата 25.2.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



так работает
Код

Label1->Caption =  WrapText("5555555555555555555555th", "...\r\n",TSysCharSet(' '),3);


так нет
Код

Label1->Caption =  WrapText("5555555555555555555555th", "...\r\n",TSysCharSet(' '), Label1->Caption.Length());


почему?


--------------------
save your mind
PM MAIL   Вверх
Alca
Дата 25.2.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 25
Всего: 50



Подрихтуй под себя, вот исходник MinimizeName:
Код

function MinimizeName(const Filename: TFileName; Canvas: TCanvas;
  MaxLen: Integer): TFileName;
var
  Drive: TFileName;
  Dir: TFileName;
  Name: TFileName;
begin
  Result := FileName;
  Dir := ExtractFilePath(Result);
  Name := ExtractFileName(Result);

  if (Length(Dir) >= 2) and (Dir[2] = ':') then
  begin
    Drive := Copy(Dir, 1, 2);
    Delete(Dir, 1, 2);
  end
  else
    Drive := '';
  while ((Dir <> '') or (Drive <> '')) and (Canvas.TextWidth(Result) > MaxLen) do
  begin
    if Dir = '\...\' then
    begin
      Drive := '';
      Dir := '...\';
    end
    else if Dir = '' then
      Drive := ''
    else
      CutFirstDirectory(Dir);
    Result := Drive + Dir + Name;
  end;
end;


Это сообщение отредактировал(а) Alca - 25.2.2009, 12:00


--------------------
PM WWW ICQ Skype Jabber   Вверх
dix75
Дата 25.2.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



Alca
спасибо у меня своя версия есть.
я думал что существует какая нить в билдере


--------------------
save your mind
PM MAIL   Вверх
TiKKi
Дата 25.2.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 1
Всего: 2



Я Вам удивляюсь!
Код

RECT  sbRect = { 0, 0, StatusBar1->Width/4, StatusBar1->Height };
DrawText( StatusBar1->Canvas->Handle, AnsiString( "Много-много-много-много-много текста" ).c_str(), -1, &sbRect, DT_END_ELLIPSIS | DT_SINGLELINE );

Это в качестве примера, чтобы было все нормально необходимо координаты подобрать.
PM   Вверх
Comm
Дата 25.2.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 1



Всем спасибо,будем колдовать)


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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