Форум программистов, компьютерный форум, киберфорум
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. Показов 6306. Ответов 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
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,799
21.10.2018, 16:25
Студворк — интернет-сервис помощи студентам
Alexandr_7, просто смените уже Delphi на Qt или JavaFX. Вы же так поступили, когда не получилось методом тыка работать с C#.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
21.10.2018, 16:31  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
А у меня - полная. Что я опять не так делаю??!!1111
Я имею в виду до установки JEDI. Он мне эту папку красным цветом помечает.
В
Code
1
C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl
есть файл dclusr250.bpl но в
Code
1
C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl\Win64
его нет

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
Alexandr_7, просто смените уже Delphi на Qt или JavaFX. Вы же так поступили, когда не получилось методом тыка работать с C#.
Я на c# до сих пор работаю правдо пока проблематично его установить на криворукую версию 10. Спасибо майкрасофт
К томуже для архиватора мне нужен делфи тупо потому что мне лень стиль делать на c# с нуля.
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,799
21.10.2018, 16:33
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
проблематично его установить на криворукую версию 10.
Вы уверены, что "криворукая" именно Windows 10? У меня, почему-то, с этим проблем никаких не возникало.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
21.10.2018, 16:38  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Вы уверены, что "криворукая" именно Windows 10? У меня, почему-то, с этим проблем никаких не возникало.
10 Не криворукая но версию 1809 действительно откатили назад. Я просто не хочу 4 часа ставить c# который потом придется переставлять так как я использую чистую установку. Ещек учитывать тот факт что половину файлов инсталятор visual studio все равно поставит на диск: c а если что то напомню диск C у меня является ssd носитель.
И смысл мне гробить ssd носитель без причины.
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,799
21.10.2018, 16:42
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Я просто не хочу 4 часа ставить c# который потом придется переставлять так как я использую чистую установку.
Если под "C#" понимается Visual Studio, то ставится она крайне быстро, особенно на SSD.

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Ещек учитывать тот факт что половину файлов инсталятор visual studio все равно поставит на диск: c а если что то напомню диск C у меня является ssd носитель.
Износ SSD идёт при записи, а не при чтении. Да и циклов записи современные SSD выдерживают over дофига. Установка же Visual Studio и .NET Framework SDK - раз в три года. В каком месте тут "гробить"?
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
21.10.2018, 17:02  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Если под "C#" понимается Visual Studio, то ставится она крайне быстро, особенно на SSD.
Ну если только один c# в VisualStudio то это зависит от скорости компа а процессор у меня слабенький. Ну про 4 часа может я и загнул но 2 часа уж точно.
Цитата Сообщение от Usaga Посмотреть сообщение
Износ SSD идёт при записи, а не при чтении. Да и циклов записи современные SSD выдерживают over дофига. Установка же Visual Studio и .NET Framework SDK - раз в три года. В каком месте тут "гробить"?
75 ТБ всего и 13.1 ТБ израсходовано
Где то 2 года использую.
Поправка установка VS как минимум 2 раз в год так как крупные обновления выходят раз в пол года. Но мне он не нужен ибо зачем писать стиль Windows10 когда как он в Delphi и так уже имеется. Да и Delphi знаю лучше чем C#. Хотя кое что в C нужно признать легче.

Добавлено через 6 минут
Кажэется я понял почему папка
Code
1
C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl\Win64
пустая.
Всеже я использую CE версию а это урезанная pro версия. Ответ очевиден. Это урезали да и оно по сути не нужны так как компиляция под win64 работает без проблем. Думаю что JEDI установится и бенз файлов в папке написанной выше.
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,799
21.10.2018, 17:07
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Ну про 4 часа может я и загнул но 2 часа уж точно.
Ну и что? Вам жалко два часа раз в N лет?

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Но мне он не нужен ибо зачем писать стиль Windows10 когда как он в Delphi и так уже имеется.
Что?.. Стиль Windows10? О чём это?
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
29.12.2019, 19:34  [ТС]
Вообще вернусь к вопросу. Но тока по другому немного пути. А именно сделать автоматическую прокрутку текста.
А прокрутку надо сделать как и в большинство программ. То есть если строка не влизает в длинну ListBox'а то строка движется в левую сторону. После того как достигла конца ну тоесть окончание строки стало видно то строка не на долго зависает и снова становится на позиции по умолчанию.
Помогите с реализацией такой идее.
Как проверить влазиет ли текст в список я знаю. Но не знаю как сделать такую анимаццию. Точнее с помощью таймера понятно но ведь надо както определять стало ли видно пользователю окончания строки или нет. Хорошобы реализация своим компонентом наследника TListBox

Добавлено через 6 минут
Забыл добавить. Так как я использую DrawItem у ListBox'а то нужно свойство которое будет содержать позицию строки если делать реализацию через свой компонент наследника стандартного.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
30.12.2019, 06:32
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Как проверить влазиет ли текст в список я знаю
у меня глаза вылазиют на этом пассаже

но, тем не менее, из этой фразы следует, что вы умеете вычислять длину текстовой строки в пикселях W.
если глянуть на описание функции Canvas.TextRect(), то там есть координата X, которую можно изменять по таймеру от 0 до -N
где N - разность между W и шириной прямоугольника, который предоставляется вам в параметрах OnDrawItem
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
30.12.2019, 19:32  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
у меня глаза вылазиют на этом пассаже
но, тем не менее, из этой фразы следует, что вы умеете вычислять длину текстовой строки в пикселях W.
если глянуть на описание функции Canvas.TextRect(), то там есть координата X, которую можно изменять по таймеру от 0 до -N
где N - разность между W и шириной прямоугольника, который предоставляется вам в параметрах OnDrawItem
Я не знаю как иэто реализовать создавая свой компонент наследника оригинального.

Скажите хотябы где найти чтото похожее
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
30.12.2019, 19:55
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Скажите хотябы где найти чтото похожее
Ты опиши чотко, чо те надо!
Может дам, чо ты хош.
Скриншот прицепи, штоль, для полноты картины.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
30.12.2019, 20:23  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Ты опиши чотко, чо те надо!
Может дам, чо ты хош.
Скриншот прицепи, штоль, для полноты картины.
Чтобы текст прокручивался если не влазиет как и в большинства списках. И нет. Не горизонтальный скроллинг текста а его прокрутка анимационная:
Code
1
А прокрутку надо сделать как и в большинство программ. То есть если строка не влизает в длинну ListBox'а то строка движется в левую сторону. После того как достигла конца ну тоесть окончание строки стало видно то строка не на долго зависает и снова становится на позиции по умолчанию.
Скриншот списка и суть проблемы:
Кликните здесь для просмотра всего текста


Я уменшить строку не могу до имени файла. Просто 1 фал может иметь одно и тоже название но лежать в разных путях. В большинство (особенно старых) программ если строка не влазиет то она просто автопрокручивается. И как дойдет до конца то зависает на долю секунды и сбрасывается к нулю.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
30.12.2019, 20:45
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Чтобы текст прокручивался
Как во всяких проигрывателях прокручивается длинное название песни/файла?

Людям такое может быть неудобно.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
30.12.2019, 21:33  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
Как во всяких проигрывателях прокручивается длинное название песни/файла?
Людям такое может быть неудобно.
Ну так можно необязательным сделать с свойством включенитя но это я и сам смогу реализовать. Я саму прокрутку незнаю как сделать но именно что к компоненту прекрутить. Чтобы можно было работать совместно с DrawItem
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
30.12.2019, 22:29
Лучший ответ Сообщение было отмечено Alexandr_7 как решение

Решение

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Чтобы можно было работать совместно с DrawItem
Это вряд ли. Событие DrawItem возникает, когда компоненту надо перерисовать строку, а это возникает при внешнем взаимодействии с компонентом.

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

Добавлено через 47 минут
Вот набросок, тут нужно учесть окончание строки, надобность в прокрутке. Наверное, ещё хорошо бы сделать задержку начала прокрутки. Если сделать потомок от TListBox, то код будет приличнее, конечно:
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
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);
  private
    { Private declarations }
    rectt: TRect;
    tp: 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; // Отрисовка пользователем
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  txtbmap.Free;
end;
 
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  rectt := Rect;
  tp := 0;
  with (Control as TListBox) do begin
    if odSelected in State then // Поменял цвет выделенного - синий слишком тёмный
      Canvas.Brush.Color := clYellow;
    Canvas.FillRect(Rect); // Очистка строки
    Canvas.TextOut(Rect.Left, Rect.Top, Items.Strings[Index]); // Вывод текста
 
    // Подготовка промежуточного Bitmap.
    txtbmap.Width  := Canvas.TextWidth(Items.Strings[Index]) + 50;
    txtbmap.Height := Rect.Bottom - Rect.Top;
    txtbmap.Canvas.Brush.Color := Canvas.Brush.Color;
    txtbmap.Canvas.Pen.Color := Canvas.Pen.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
    BitBlt(lbcanvas.Handle, rectt.Left - tp, rectt.Top, txtbmap.Width, rectt.Bottom, txtbmap.Canvas.Handle, 0, 0, srccopy);
    Inc(tp);
  end;
end;
1
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
30.12.2019, 22:34
В листбоксе лучше не делать этого. Возьми TVirtualStringTree.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
30.12.2019, 23:42  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
В листбоксе лучше не делать этого. Возьми TVirtualStringTree.
В ListBox'е это сделать бонально легче.
Ведь мне еще как выбор файла. А полные имена файлов лежат в TStringList

Добавлено через 1 минуту
Цитата Сообщение от AzAtom Посмотреть сообщение
Вот набросок, тут нужно учесть окончание строки, надобность в прокрутке. Наверное, ещё хорошо бы сделать задержку начала прокрутки. Если сделать потомок от TListBox, то код будет приличнее, конечно:
Спасибо. Но желательно конечно свой компонент создать. Хотя не так чтобы сильно нужно. В любом случае спасибо.

Добавлено через 5 минут
Цитата Сообщение от AzAtom Посмотреть сообщение
Вот набросок, тут нужно учесть окончание строки, надобность в прокрутке. Наверное, ещё хорошо бы сделать задержку начала прокрутки. Если сделать потомок от TListBox, то код будет приличнее, конечно:
Но вопрос тока как определить что строка достигла своей конечно позиции чтобы потом обнулить?
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
31.12.2019, 01:08
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
В ListBox'е это сделать бонально легче.
Ведь мне еще как выбор файла. А полные имена файлов лежат в TStringList
Моё дело - предложить.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
31.12.2019, 01:08
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
В ListBox'е это сделать бонально легче.
Ведь мне еще как выбор файла. А полные имена файлов лежат в TStringList
Моё дело - предложить.
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
31.12.2019, 01:50
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Но вопрос тока как определить что строка достигла своей конечно позиции чтобы потом обнулить?
У вас и с этим проблема? Не пытались подумать зачем в коде AzAtom введена переменная tp: integer;?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.12.2019, 01:50

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
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 реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru