Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
RAD XE3+

Не помещается текст в ListBox

14.10.2018, 14:58. Показов 6315. Ответов 66
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Подскажите как быть если не помещается текст в строку listbox. Сделать ListBox длиннее не вариант. Все равно ширина не может быть длиннее размера монитора а строка может быть и длинее.

Заранее спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2018, 14:58
Ответы с готовыми решениями:

Текст не помещается
Здравствуйте. Имеется слово которое находится в div. На некоторых компах из-з разрешения экрана слово выходит за пределы div. Как это...

Не помещается текст в переменную
На каком-то этапе текст не помещается в переменную и просто "обрезается" в конце. Делал отправку из формы через post, ajax'ом, json, в...

Текст не помещается в Lable
Мне нужно в программе вставить довольно объемный кусок текста но он не помещается в элементе lable, обрывается на полуслове.Что делать?

66
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
31.12.2019, 07:04
Студворк — интернет-сервис помощи студентам

Не по теме:

Кажется, я понял стиль программирования ТС.


Вот более-менее рабочий набросок:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Timer1: TTimer;
    procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
    RectT: TRect;
    ScrollDelay: integer;
    ScrollPos: integer;
    txtbmap: TBitmap;
    lbCanvas: TCanvas;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  txtbmap := TBitmap.Create;
  Timer1.Interval := 100;
  ListBox1.Style := lbOwnerDrawFixed; // Отрисовка пользователем
  ScrollDelay := 10;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  txtbmap.Free;
end;
 
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  txtw: integer;
begin
  RectT := Rect;
  ScrollPos := 0;
  with (Control as TListBox) do begin
//    if odSelected in State then // Поменял цвет выделенного - синий слишком тёмный
//      Canvas.Brush.Color := rgb(160, 160, 224);
    Canvas.FillRect(Rect); // Очистка строки
    Canvas.TextOut(Rect.Left, Rect.Top, Items.Strings[Index]); // Вывод текста
 
    // Подготовка промежуточного Bitmap.
    txtw := Canvas.TextWidth(Items.Strings[Index]);
    if txtw > (Rect.Right - Rect.Left) then txtbmap.Width  := txtw + 30
                                       else txtbmap.Width  := txtw;
    txtbmap.Height := Rect.Bottom - Rect.Top;
    txtbmap.Canvas.Brush.Color := Canvas.Brush.Color;
    txtbmap.Canvas.Pen.Color := Canvas.Pen.Color;
    txtbmap.Canvas.Font.Color := Canvas.Font.Color;
    txtbmap.Canvas.FillRect(Classes.Rect(0, 0, txtbmap.Width, txtbmap.Height));
    // На нём нарисовать всю строку для последующей прокрутки
    txtbmap.Canvas.TextOut(0, 0, Items.Strings[Index]);
    lbCanvas := Canvas; // Сохранить Canvas от ListBox, чтобы потом на нём рисовать
    // При создании потомка от TListBox этого не понадобится
  end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Прокрутка текста по таймеру
  if Assigned(lbCanvas) then begin
    if ScrollPos > ScrollDelay then // Задержка прокрутки
      BitBlt(lbCanvas.Handle, RectT.Left - ScrollPos + ScrollDelay, RectT.Top,
             txtbmap.Width, RectT.Bottom, txtbmap.Canvas.Handle, 0, 0, srccopy);
    Inc(ScrollPos);
    if ScrollPos > txtbmap.Width - (RectT.Right - RectT.Left) then // Циклическая прокрутка
      ScrollPos := 0;
  end;
end;
Добавлено через 55 секунд
Alexandr_7, почему не хочешь показывать подсказку (Hint), если строка длинее ширины ListBox?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
31.12.2019, 09:57
OnDrawItem возникает, когда система считает, что его нужно перерисовать
чтобы она так засчитала, нужно делать Invalidate или InvalidateRect
т.е. работа таймера будет только в делании Invalidate раз в 100 мсек

но стандартные компоненты Windows лучше не переопределять, слишком дорого выходит не написать новый функционал, а подавить старый, да еще когда к нему доступа по сути нет...

в целом очень несложно сделать свой ListBox от TGraphicControl
ну или пойти от VirtualTree как уже сказано выше.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
31.12.2019, 10:56
Кстати да, графическое анимированное меню на основе TPaintBox или его предка будет очень неплохо.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
31.12.2019, 11:03  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
У вас и с этим проблема? Не пытались подумать зачем в коде AzAtom введена переменная tp: integer;?
Я в коде разобрался. tp: integer отнимает позицию X из позиции по умолчанию но нет проверки и возврат строки в исходную позицию. Тоесть left улетит влево и назад не вернется. Нужно именно узнать достиг left позиции при которой видно окончания строки. Если да то ставим таймер на 1500 милисекунд после чего возвращаем позицию к нулю.

Добавлено через 3 минуты
Также нужно проматывать только выделенную строчку текста. Походу забыл это сказать.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
31.12.2019, 12:29
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
проматывать только выделенную строчку текста
Смотри последний вариант.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
01.01.2020, 03:11  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
Смотри последний вариант.
Глянул. Но все равно это будет анимировать все строчки. А надо только те что выбрана и если не влизает.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
01.01.2020, 11:21
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Глянул. Но все равно это будет анимировать все строчки.
Плохо глянул, значит, глазами по диагонали, а не в самой делфи.

Добавлено через 38 секунд

Не по теме:

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.01.2020, 11:21

Не помещается текст в ячейке в DataGridView
Привет всем ! Я новичок на форуме , поэтому сразу прошу прощения ежели что не так. У меня имеется грид, который читает инфу из БД и одно ...

Текст не помещается в TextBox по высоте
Здравствуйте. В TextBox установил BorderStyle=None, размер шрифта 9.75pt Строка стала подрезаной снизу. Как исправить?

В CheckListBox не помещается текст, что делать?
Что делать, если в данный компонент не помещается текст? Там ведь ни прокрутки никакой нет, ни пролистать ничего...

Пропадает текст, если он не помещается на StatusStrip
Заметил одну неприятность. Если текст лейбла помещается в строке статуса StatusStrip, то все нормально, но стоит тексту увеличиться так,...

Как узнать, что текст не помещается в ячейке Excel?
т.е. когда имеют место вот такие символы ############. И можно ли расширить столбец, опираясь только на ячейку с этой ошибкой. Т.е. надо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
67
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru