Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
ВнизКрасивое обрезание длинных строк в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.041 c