Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Красивое обрезание длинных строк в ListBox... [D7, WinXP]


Gear ©   (2004-10-25 00:46:00) 

Пожалуйста, приведите пример кода, который сможет выполнить красивое обрезание длинных строк в ListBox. Например:

Никола...
Васили...
Саша
Петр
Алекса...


kostan   (2004-10-25 07:28:00) [1]

да запихнуть куда нибудь в процедуре ...DrawItem

смотри help по : procedure TForm1.ListBox1DrawItem(........

может не совсем то - но можно все нарисовать:\


Юрий Зотов   (2004-10-25 07:26:00) [2]

Функция DrawText с установленным флагом DT_END_ELLIPSIS все сделает сама.


Вася (типа)   (2004-10-25 07:08:00) [3]

Обрезаем что? Что визуально не влазит?

Ну наверное примерно так. Не проверял, просто накидал, бумаю будет понятно куда копать... Куда это лучше приткнуть - ну не знаю. Наверное - на отрисовку можно.

var
  w: Integer;  // ширина клиентской части
  i: Integer;
  s: String;   // временная строка

begin
...
  w := ListBox1.ClientRect.Right;
  if ListBox1.Canvas.TextWidth(ListBox1.Items.Strings[<текущее>]) > w then
  begin
    for i := Length(ListBox1.Items.Strings[<текущее>])-1 downto 1 do
    begin
      s := Copy(ListBox1.Items.Strings[<текущее>], 1, i) + '...';
      if ListBox1.Canvas.TextWidth(ListBox1.Items.Strings[<текущее>]) <= w then
        Break;  // нашли удовлетворяющую длину, строка - в s
    end;
    ... выводим текст из s - он как раз влазит и содержит точки ...
  end
  else
    ... выводим полностью Items.Strings[<текущее>], т.к. оно изначально полезло ...


Ну тут много недоделок в коде: а что, если три точки не лезут? Ну и проч. Да и оптимизировать можно. Но идея, надеюсь, понятна.


Наверх

Титульная страница Поиск, карта сайта Написать письмо