Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

Красивое обрезание длинных строк в ListBox...   Найти похожие ветки 

 
Gear   (2004-10-25 00:46) [0]

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

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


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

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

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

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[<текущее>], т.к. оно изначально полезло ...


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


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

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


 
kostan ©   (2004-10-25 07:28) [3]

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.025 c
1-1098647524
MegaBonus
2004-10-24 23:52
2004.11.07
Почему замедляется работа процедуры?


3-1097271774
Sid
2004-10-09 01:42
2004.11.07
IBase не находит файл *.gdb на сетевом диске


14-1098276307
Alek
2004-10-20 16:45
2004.11.07
Про написание сервисов!


1-1098348907
ljurik
2004-10-21 12:55
2004.11.07
Как узнать тип поинтера


14-1098029285
Gero
2004-10-17 20:08
2004.11.07
Всем сисадминам