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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2012, 19:30   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию ListView. Отобразить ProgressBar, не трогая Item.Data.

Доброго времени!

Необходимо отобразить TGauge или TProgressBar в TlistItem, TListview'а,
НО TListItem.Data уже используется мной для хранения других, не менее, важных данных.

Можно ли подсказать др. компонент(аналог TlistView'а или довесок для него) или пак компонент ну в общем, чтобы прогрессбар можно было встроить не трогая TListItem.Data.

Спасибо.
Человек_Борща вне форума Ответить с цитированием
Старый 05.09.2012, 19:51   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если в Data указатель на свой компонент, то можно в него сво-во добавить с типом TProgressBar. Отображать в ListView не пробовал, было бы интересно глянуть на реализацию такого
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.09.2012, 19:58   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
интересно глянуть на реализацию такого
Практичеки любой довнлоадер.
eval вне форума Ответить с цитированием
Старый 05.09.2012, 20:02   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Аватар,
в Data, указатель на объект с нужными данными.
Может можно объявить в объекте TGauge и как-то отображать его в ListView? Но как?
eval, название Full Source'ного на Delphi довнолоадера?
Человек_Борща вне форума Ответить с цитированием
Старый 05.09.2012, 20:10   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Гугл сразу подсказал пример реализации
http://delphiru.ru/komponent/16-tpro...-listview.html
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.09.2012, 20:17   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Было бы так просто, не подымал бы топик. Очевидно же:
Код:

procedure TForm1.AddItemButtonClick(
  Sender: TObject);
const
  pbColumnIndex = 1;
  pbMax = 100;
var
  li : TListItem;
  lv : TListView;
  pb : TProgressBar;
  pbRect : TRect;
begin
  lv := ListViewEx1;

  //создать новый ListItem (для lv)
  li := lv.Items.Add;
  li.Caption := 'Item ' + IntToStr(lv.Items.Count);

  //создать ProgressBar, поместить его во второй столбец
  pb := TProgressBar.Create(nil);
  pb.Parent := lv;
  li.Data := pb;
  pbRect := li.DisplayRect(drBounds);
  pbRect.Left := pbRect.Left + 
                 lv.Columns[-1 + pbColumnIndex].Width;
  pbRect.Right := pbRect.Left + 
                  lv.Columns[pbColumnIndex].Width;
  pb.BoundsRect := pbRect;
end; //AddItemButtonClick
Как рисовать item самому, думаю Lv умеет это?

Последний раз редактировалось Человек_Борща; 05.09.2012 в 20:21.
Человек_Борща вне форума Ответить с цитированием
Старый 05.09.2012, 20:25   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Хелпер к TListItem, не?
eval вне форума Ответить с цитированием
Старый 05.09.2012, 20:34   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Выше говорил, не напрямую Data, а свойство объекта. Типа
TMyComponent(li.Data).ProgressBar:= pb;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.09.2012, 20:39   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Вариантов тьма, вот еще - стринглист рядом и в нем прогресбары, по индексу или по тайтлу связь.
eval вне форума Ответить с цитированием
Старый 05.09.2012, 20:56   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Где-то выше до описания формы:
Код:
TProgressBar=class(TProgressBar)
 НовоеСвойство:Тип
end;
Сам код
Код:
procedure TForm1.AddItemButtonClick(
...
  pb := TProgressBar.Create(nil);
  pb.Parent := lv;
  li.Data := pb;
...
Соответственно
TProgressBar(li.Data).НовоеСвойство четко вернет нужное.

Короче - переопределить класс (это кажется сабклассинг называется)
Я так часто делаю если хочу навернуть новый компонент новыми свойствами на основе стандартного.
Идея ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти ProgressBar в ListView fezilk25 Общие вопросы Delphi 2 07.02.2011 22:39
Экспрот данный в ворд отобразить в ProgressBar Polotenchik Общие вопросы Delphi 3 26.08.2009 01:42
Как в ProgressBar отобразить процесс выполнения Post запроса через Idhttp Joe_Tribbiani Работа с сетью в Delphi 8 15.06.2009 10:39
Как отобразить в ProgressBar процесс отправки писем через SMTP leon2009 Работа с сетью в Delphi 15 20.03.2009 21:26
ProgressBar в ListView schnaps Общие вопросы Delphi 7 14.03.2009 09:11