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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2012, 21:13   #1
JoLan
Delphi XE7
Пользователь
 
Аватар для JoLan
 
Регистрация: 26.07.2010
Сообщений: 74
По умолчанию Изменение высоты строк TListView

Добрый вечер. Подскажите, как можно изменить высоту строк в ListView, помогает изменение размера шрифта, но в заголовках колонок он тоже меняется. Существует ли способ уменьшить высоту строки, оставив при этом тот же размер шрифта в заголовках? (стиль шрифта в ячейках неважен, т.к. использую OwnerDraw)
JoLan вне форума Ответить с цитированием
Старый 05.07.2012, 06:57   #2
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

Что-то попробовал - на вскидку не получилось.
Категорически необходим TListView? А то можно ведь посмотреть в сторону VirtualStringTree.
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Старый 05.07.2012, 22:23   #3
JoLan
Delphi XE7
Пользователь
 
Аватар для JoLan
 
Регистрация: 26.07.2010
Сообщений: 74
По умолчанию

Желательно именно TListView. Т.к. в программе много списков + все создается динамически. Под другой компонент придется переписывать много кода.
JoLan вне форума Ответить с цитированием
Старый 08.07.2012, 18:09   #4
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Цитата:
использую OwnerDraw
Тогда лови CN_MEASUREITEM и по его получению увеличивай itemHeight как тебе нужно.
volvo877 вне форума Ответить с цитированием
Старый 12.07.2012, 18:23   #5
JoLan
Delphi XE7
Пользователь
 
Аватар для JoLan
 
Регистрация: 26.07.2010
Сообщений: 74
По умолчанию

Цитата:
Сообщение от volvo877 Посмотреть сообщение
Тогда лови CN_MEASUREITEM и по его получению увеличивай itemHeight как тебе нужно.
Вписал в класс Vcl.ComCtrls.TCustomListView процедуру
Код:
procedure WMMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM;
И ниже
Код:
procedure TCustomListView.WMMeasureItem(var Message: TWMMeasureItem);
begin
  Message.MeasureItemStruct^.ItemHeight := 10;
  Message.Result := 1;
end;
Так же поставил OwnerDraw у ListView1, Рисую так:
Код:
procedure TForm1.ListView1DrawItem(Sender: TCustomListView; Item: TListItem;
  Rect: TRect; State: TOwnerDrawState);
var mRect: TRect;
begin
  mRect := Item.DisplayRect(drLabel);
  mRect.Left := mRect.Left - 4;
  mRect.Right := mRect.Right - 1;
  Sender.Canvas.Brush.Color := clWindow;
  Sender.Canvas.FillRect(mRect);
  Sender.Canvas.TextRect(mRect, mRect.Left+6, mRect.Top + 2, Item.Caption);
end;
Высота как была 18 пх, так и осталась. Я просто мало что в этом понимаю.
JoLan вне форума Ответить с цитированием
Старый 12.07.2012, 23:17   #6
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Код:
type
   TListView = class(ComCtrls.TListView)
   private
      procedure CNMeasureItem(var Message : TWMMeasureItem); message CN_MEASUREITEM;
   end;

   TForm1 = class(TForm)
   // ...

procedure TListView.CNMeasureItem(var Message: TWMMeasureItem);
begin
   Message.MeasureItemStruct^.ItemHeight := 10;
   Message.Result := 1;
end;

procedure TForm1.ListView1DrawItem(Sender: TCustomListView; Item: TListItem;
  Rect: TRect; State: TOwnerDrawState);
var mRect : TRect;
begin
   mRect := Item.DisplayRect(drLabel);
   mRect.Left := mRect.Left - 4;
   mRect.Right := mRect.Right - 1;
   Sender.Canvas.Brush.Color := clWindow;
   Sender.Canvas.FillRect(mRect);
   Sender.Canvas.TextRect(mRect, mRect.Left+6, mRect.Top + 2, Item.Caption);
end;
Выводит вот такую картинку (то есть, высота все-таки изменяется) :
Изображения
Тип файла: png lv.PNG (1.6 Кб, 320 просмотров)
volvo877 вне форума Ответить с цитированием
Старый 12.07.2012, 23:52   #7
JoLan
Delphi XE7
Пользователь
 
Аватар для JoLan
 
Регистрация: 26.07.2010
Сообщений: 74
По умолчанию

Вопрос решен, спасибо огромное)
JoLan вне форума Ответить с цитированием
Старый 23.07.2012, 18:22   #8
JoLan
Delphi XE7
Пользователь
 
Аватар для JoLan
 
Регистрация: 26.07.2010
Сообщений: 74
По умолчанию

Возможно ли изменить цвет сетки в TListView?
JoLan вне форума Ответить с цитированием
Старый 30.03.2015, 14:41   #9
Dee63
Пользователь
 
Аватар для Dee63
 
Регистрация: 09.03.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от JoLan Посмотреть сообщение
Вопрос решен, спасибо огромное)
Ну а решение то где?
Dee63 вне форума Ответить с цитированием
Старый 10.08.2017, 06:59   #10
Caeles-Lupus
 
Регистрация: 31.08.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Dee63 Посмотреть сообщение
Ну а решение то где?
Вот-вот, долго нам его еще ждать?
Caeles-Lupus вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TableLayoutPanel изменение высоты строки mMAg C# (си шарп) 1 13.06.2012 20:35
Изменение высоты панели задач KAMIKAZA Общие вопросы Delphi 0 25.07.2011 21:46
Изменение высоты строк djdron Общие вопросы Delphi 2 28.11.2010 10:01
изменение высоты фрейма MiK_on JavaScript, Ajax 2 11.09.2010 21:58
Автоматическое изменение высоты строки Solex Microsoft Office Excel 3 11.02.2010 18:37