Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.07.2013, 20:47
Oreon Oreon вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 36
Репутация: 10
По умолчанию Задать ширину ListBox по ширине самой длинной строки

Добрый день.
Имеется ListBox. Необходимо задать его ширину так, чтоб полностью влезала и была видна самая длинная его строка. Пробовал такой код (выполняется при добавлении строки, s - добавляемая строка):
Код:
ln:=ListBox1.Canvas.TextWidth(s);
if ln>ListBox1.ClientWidth {или просто Width} then 
       ListBox1.Width:=ln;
не работает, текст все равно не влезает. Помогите решить задачку
Ответить с цитированием
  #2  
Старый 24.07.2013, 21:02
Аватар для AlexandrV
AlexandrV AlexandrV вне форума
Начинающий
 
Регистрация: 10.02.2013
Сообщения: 197
Версия Delphi: XE3
Репутация: -624
По умолчанию

Цитата:
Сообщение от Oreon
Добрый день.
Имеется ListBox. Необходимо задать его ширину так, чтоб полностью влезала и была видна самая длинная его строка. Пробовал такой код (выполняется при добавлении строки, s - добавляемая строка):
Код:
ln:=ListBox1.Canvas.TextWidth(s);
if ln>ListBox1.ClientWidth {или просто Width} then 
       ListBox1.Width:=ln;
не работает, текст все равно не влезает. Помогите решить задачку
Если строка очень длинная то текст все равно влезать не будет. попробуй так
Код:
ListBox1.ClientWidth:=ListBox1.Width+Length(ListBox1.Items.Strings[Индекс строки]);
Ответить с цитированием
  #3  
Старый 25.07.2013, 10:14
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

добавь отступ +4:
Код:
var
  i: Integer;
  s: String;
  w: Integer;
begin
  for i:=1 to 100 do
  begin
    s:=IntToStr(Random(MaxInt));
    s:=s+IntToStr(Random(MaxInt));
    s:='['+s+']';
    ListBox1.Items.Add(s);
    w:=ListBox1.Canvas.TextWidth(s)+4;
    if w>ListBox1.ClientWidth then ListBox1.ClientWidth:=w;
  end;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 25.07.2013, 11:14
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от NumLock
добавь отступ +4:
Почему 4, почему не 8 или не 40? А если у меня крупные шрифты? А если у меня схема для слабовидящих? Программист в первую очередь должен заботиться о совместимости.

Предлагаю такой вариант:
Код:
begin
  ln := ListBox1.Canvas.TextWidth(s);
  if ln > ListBox1.ClientWidth then
    ListBox1.Width := ln + ListBox1.Width - ListBox1.ClientWidth;
end;
Надеюсь, не надо объяснять, что разница между Width и ClientWidth как раз и должна заключать в себя отступы. Другой способ -- получать отступы функциями API вроде GetSystemMetrics, но тут он мне кажется излишне сложным.
Ответить с цитированием
  #5  
Старый 25.07.2013, 13:25
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

3D бордюр окна не зависит от размера шрифта. но если очень напрягает то правильней естественно 2*GetSystemMetrics(SM_CYEDGE)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 25.07.2013, 14:36
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Вот и не надо об этом молчать. Можете же, когда захотите.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:05.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025