Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
RAD XE3+

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

14.10.2018, 14:58. Показов 6379. Ответов 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,496
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,496
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,496
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,496
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru