Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2015, 11:28   #1
KORT
Вот я и
Форумчанин
 
Аватар для KORT
 
Регистрация: 07.04.2007
Сообщений: 501
Восклицание вертикальное выравнивание текста в строках CheckListBox

Доброе время суток! Имеется CheckListBox, в обработчике DrawItem:
Код:
DrawText(CheckListBox1.Canvas.Handle,PChar(CheckListBox1.Items[Index]),Length(CheckListBox1.Items[Index]),Rect, DT_WORDBREAK);
Получается во что: !см. миниатюры
Первая строка отлично, как надо - все перенеслось, а вот 2-4 строки выглядят некрасиво... отсюда вопрос: как сделать красиво?

Пытался сделать вот так:
Код:
if CheckListBox1.Canvas.TextWidth(CheckListBox1.Items[Index]) > CheckListBox1.Width then
        CheckListBox1.ItemHeight:=42
    else
        CheckListBox1.ItemHeight:=21;
Когда встречаются одинаковые по высоте строки, то все ок, но как только разные - то ошибка, то бесконечный цикл...
Изображения
Тип файла: jpg 1.jpg (11.2 Кб, 130 просмотров)
Исходники программ - http:\\www.kort.3dn.ru
KORT вне форума Ответить с цитированием
Старый 18.02.2015, 12:01   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var xHeight: Integer;
begin
  xHeight:=DrawText(CheckListBox1.Canvas.Handle,PChar(CheckListBox1.Items[Index]),Length(CheckListBox1.Items[Index]),Rect,DT_CALCRECT or DT_WORDBREAK);
  if xHeight<CheckListBox1.ItemHeight then begin
    Rect.Top:=Rect.Top+(CheckListBox1.ItemHeight-xHeight) div 2;
    Rect.Bottom:=Rect.Top+xHeight;
  end;
  DrawText(CheckListBox1.Canvas.Handle,PChar(CheckListBox1.Items[Index]),Length(CheckListBox1.Items[Index]),Rect,DT_WORDBREAK);
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.02.2015, 13:21   #3
KORT
Вот я и
Форумчанин
 
Аватар для KORT
 
Регистрация: 07.04.2007
Сообщений: 501
По умолчанию

спс, то что надо! Чуток доработал:
Цитата:
var
xHeight: Integer;
begin
xHeight:=DrawText(CheckListBox1.Can vas.Handle,PChar(CheckListBox1.Item s[Index]),Length(CheckListBox1.Items[Index]),Rect,DT_CALCRECT or DT_WORDBREAK);
if xHeight < CheckListBox1.ItemHeight then
begin
Rect.Top:=Rect.Top + (CheckListBox1.ItemHeight - xHeight) div 2;
Rect.Bottom:=Rect.Top + xHeight;
end
else
CheckListBox1.ItemHeight:=xHeight;

DrawText(CheckListBox1.Canvas.Handl e,PChar(CheckListBox1.Items[Index]),Length(CheckListBox1.Items[Index]),Rect,DT_WORDBREAK);
Исходники программ - http:\\www.kort.3dn.ru

Последний раз редактировалось KORT; 18.02.2015 в 13:54.
KORT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выравнивание текста monro86 Visual C++ 7 05.04.2012 23:35
Выравнивание текста gamaiunov_alex Microsoft Office Excel 11 19.04.2011 10:04
Вертикальное выравнивание в плавающем блоке JTG HTML и CSS 5 14.03.2011 19:59
выравнивание текста Olya1985 HTML и CSS 2 19.02.2011 21:28
Вертикальное выравнивание текста в div? artem_from_minsk HTML и CSS 3 06.05.2010 15:29