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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2014, 20:33   #1
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
Вопрос [TListView]: Как сделать чтобы иконки отображались только во втором столбце?

Добрый вечер!

На форме есть ListView в режиме vsReport, 3 столбца.
Хочу чтобы иконки отображались во втором столбце (SubItem[0]), в свойствах ListView SmallIcons указываю нужный ImageList. затем пишу код:
Код:
procedure TForm1.btn1Click(Sender: TObject);
var
  itm: TListItem;
begin
 itm:= ListView1.Items.Add;
 with itm do
 begin
  Caption:= 'sdfsf';
  SubItems.Add('sdfsdfsdf');
  SubItems.Add('s444fsdf54645sdf');
  SubItemImages[0]:=0;
 end;
end;
В итоге почему-то в первый столбец тоже добавляется иконка, получается вот так:


Пробовал в процедуре добавления ставить ImageIndex:=-1;, в итоге иконка в первом столбце не отображалась, но под нее было выделено пространство. Как сделать чтобы иконка отображалась только во втором столбце и при этом не было вот этого пустого места перед первым столбцом?


Последний раз редактировалось garuna; 06.12.2014 в 20:35.
garuna вне форума Ответить с цитированием
Старый 06.12.2014, 21:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Думаю описать процедуры отрисовки. OnDrawItem и OnDrawSubItem кажись.
И в них прописать код рисования иконки и вывода текста.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.12.2014, 21:16   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Там -1 где-то в имиджиндексе итема нужно поставить, нулевой то находит в имеджлисте. Ой не заметил. Тогда как Стилет предлагает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 06.12.2014 в 21:19.
Аватар вне форума Ответить с цитированием
Старый 17.12.2014, 12:32   #4
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Думаю описать процедуры отрисовки. OnDrawItem и OnDrawSubItem кажись.
И в них прописать код рисования иконки и вывода текста.

Зачем? Ведь иконки и так уже прорисовываются в SubItem как нужно.
Необходимо только как-то убрать вот этот пустой отступ слева в первой колонке. Может кто-то знает как это сделать? Может с помощью каких-нибудь SendMessage() что ли.. Подскажите!

Последний раз редактировалось garuna; 17.12.2014 в 12:34.
garuna вне форума Ответить с цитированием
Старый 17.12.2014, 12:57   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Попробуйте применить TVirtualStringTree или TVirtualLIstView. Они более гибкие в плане рисования чего-угодно.
Человек_Борща вне форума Ответить с цитированием
Старый 17.12.2014, 14:30   #6
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

блин, не поверю что не существует какого-нибудь более простого способа...
garuna вне форума Ответить с цитированием
Старый 17.12.2014, 15:59   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
блин, не поверю что не существует какого-нибудь более простого способа...
Стандартные компоненты геморойные в этом плане.
Человек_Борща вне форума Ответить с цитированием
Старый 17.12.2014, 16:18   #8
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от garuna Посмотреть сообщение
блин, не поверю что не существует какого-нибудь более простого способа...
Конечно есть...
Добавьте одну простенькую строчку:
Код:
 with itm do
begin
Caption:= 'sdfsf';
SubItems.Add('sdfsdfsdf');
SubItems.Add('s444fsdf54645sdf');
SubItemImages[0]:=0;
ImageIndex:=-1;
end;
kropotkina-alice вне форума Ответить с цитированием
Старый 17.12.2014, 17:18   #9
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
Радость

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Конечно есть...
Добавьте одну простенькую строчку:
Код:
 with itm do
begin
Caption:= 'sdfsf';
SubItems.Add('sdfsdfsdf');
SubItems.Add('s444fsdf54645sdf');
SubItemImages[0]:=0;
ImageIndex:=-1;
end;
Спасибо, но я уже писал об этом в теме (пустое место вместо иконки остается).
Проблему решил добавлением этой строки:
Код:
Indent:=-1;
garuna вне форума Ответить с цитированием
Старый 17.12.2014, 17:24   #10
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Прошу прощения, просмотрела
kropotkina-alice вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как объединить ячейки во втором столбце при совпадении значений в первом столбце BorisD Microsoft Office Excel 13 08.09.2018 10:09
Как сделать так чтобы не отображались даты Даты вместо Цифр в ЕКСЕЛЬ? d88n Помощь студентам 1 17.06.2011 05:16
Как сделать так, чтобы в корректно отображались русские буквы(С) Александр Елис Помощь студентам 0 06.11.2009 19:39
Как сделать так,чтобы в StatusBar-е отображались некоторые сведения из БД???? Alexij БД в Delphi 1 16.06.2008 07:53
Как сделать так, чтобы в TLabel отображались текущее системное время? Bill Gates Общие вопросы Delphi 3 03.01.2008 01:12