Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация TListview 
V
    Опции темы
Ak47black
  Дата 19.4.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Как оптимизировать добавление и смену данных показываемых в TListView что-бы небыло мигания.  smile 
У меня следуший код
Код

procedure TUserFrame.FillOperations;
var
  i: Integer;
begin
  OperationsList.Clear;
  for i:=0 to Length(TransferModele.TransferingOperations)-1 do
  begin
    with OperationsList.Items.Add do
    begin
      Caption:= TransferModele.TransferingOperations[i].Name;
      SubItems.Add(IntToStr(TransferModele.TransferingOperations[i].Size));
      SubItems.Add(TransferModele.TransferingOperations[i].Source);
      SubItems.Add(TransferModele.TransferingOperations[i].Destination);
      SubItems.Add(TransferModele.TransferingOperations[i].Status);
      SubItems.Add(TransferModele.TransferingOperations[i].AverangeSpeed);
      SubItems.Add(TransferModele.TransferingOperations[i].CurrentSpeed);
      SubItems.Add(TransferModele.TransferingOperations[i].Elapsed);
      SubItems.Add(TransferModele.TransferingOperations[i].Left);
      if TransferModele.TransferingOperations[i].TransferingTape = tfDownload then
        ImageIndex:=0 else ImageIndex:=1;
    end;
  end;
end;

При малом количестве элементов то все мормально ,но если много ,то ерунда полная получаеться.
Вродебы нужно использовать 
Цитата

OnDataHint 
OnDataFind 
OnDataStateChange

Только как с ними работать я особо большой инфы ненаходил.
PM MAIL   Вверх
Sunvas
Дата 19.4.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



А поставить doublebuffered формы в true пробовал?


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Rennigth
Дата 19.4.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Ak47black, 
А 
Код
  
  ListView.Items.BeginUpdate
  ListView.Items.EndUpdate


Пробовал?


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Ak47black
Дата 19.4.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Цитата

А поставить doublebuffered формы в true пробовал? 

Цитата

Код

  ListView.Items.BeginUpdate
  ListView.Items.EndUpdate


Пробовал оба но не помогают.

Добавлено через 1 минуту и 8 секунд
У меня элементов может быть очень много например 50000 так что тут надо 
с 
Цитата

OnDataHint 
OnDataFind 
OnDataStateChange

Както связать.
PM MAIL   Вверх
Rennigth
Дата 19.4.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Ak47black, Тебе данные надо хранить отдельно, а показывать только нужные.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Yanis
Дата 19.4.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Может быть Virtual Tree View?!


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Ak47black
Дата 19.4.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Yanis, да я чтото там похожее вижу в Virtual List view примере только как тут переделать то.
Цитата

Ak47black, Тебе данные надо хранить отдельно, а показывать только нужные.

Ну да, но список всеровно предеться заполнять, а видимы то несколько которые умешаються на видимой области. Мигают то понятно почему, изза того что пересовываються при каждом дополненом элементе.

Это сообщение отредактировал(а) Ak47black - 19.4.2007, 15:17
PM MAIL   Вверх
MetalFan
Дата 19.4.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Код

LockWindowUpdate( lvw.Handle );
........
LockWindowUpdate( 0 );



Это сообщение отредактировал(а) MetalFan - 19.4.2007, 15:56


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Rennigth
Дата 19.4.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



MetalFan,  Это конечно поможет, но этож глобальный Lock, на лючном опыте знаю что его снимает тот-же winamp. Лутше уж юзать 
примерно такую штуку:
Код

procedure BeginWindowUpdate(hWnd: DWORD);
begin
  SendMessage(hWnd, WM_SETREDRAW, 0, 0);
end;

procedure EndWindowUpdate(hWnd: DWORD);
begin
  SendMessage(hWnd, WM_SETREDRAW, 1, 0);
  RedrawWindow(hWnd, nil, 0, RDW_FRAME + RDW_INVALIDATE + 
    RDW_ALLCHILDREN + RDW_NOINTERNALPAINT);
end;


Это сообщение отредактировал(а) Rennigth - 19.4.2007, 16:03


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Ak47black
Дата 19.4.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



А что 
Цитата

OnDataHint 
OnDataFind 
OnDataStateChange

Такие события некто неюзал?
Или я чтото туплю?

Это сообщение отредактировал(а) Ak47black - 19.4.2007, 16:13
PM MAIL   Вверх
Beltar
Дата 20.4.2007, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 3
Всего: 7



50000 узлов слишком много. Windows Explorer тормомозит при 1000 файлов в папке. Заполнение ListView 4609 узлами (отображение содержимого ветки TreeView) у меня заняло 2-3 секунды на Celeron 950.

Цитата

OnDataHint


Я не юзал, но ставлю рубль, что это событие всплытия подсказки. Причем оно здесь??


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
dumb
Дата 20.4.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



Цитата(Beltar @  20.4.2007,  07:40 Найти цитируемый пост)
Я не юзал, но ставлю рубль, что это событие всплытия подсказки. Причем оно здесь?? 

гони рубель! smile

[quote:F1]
Use OnDataHint to update a range of items before the OnData event occurs. This method of updating items is more efficient than individually updating items in the OnData event handler. The range of items specified in the OnDataHint does not always match the range of items for which the OnData event handler is called; therefore, you must be prepared to update individual items in the OnData event handler as well.
[/quote]

[quote=Beltar, 20.4.2007,  07:40, post1105725]50000 узлов слишком много. Windows Explorer тормомозит при 1000 файлов в папке. Заполнение ListView 4609 узлами (отображение содержимого ветки TreeView) у меня заняло 2-3 секунды на Celeron 950.[/quote]
вот именно поэтому и используются OnData*. в случае работы с OnData* 50000 - это "тьпу". а в Explorer'е тормоза связаны с другим моментом - он вытаскивает инфу(ищет связанную иконку, напр.) из каждого файла, потому и тормозит.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1893 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.