![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мерцание TListBox [D7, XP]
kukuikar © (2010-07-30 14:32:00)Здравствуйте, мастера.
Есть длинный цикл
for i := 0 to 300000 do
begin
...
...
ListBox1.Items[ListBox1.Items.Count - 1] := 'la-la-la - ' + IntToStr(i + 1);
end;
Можно ли уменьшить или вообще убрать мерцание ListBox?
KilkennyCat (2010-08-01 21:43:00) [1]Удалено модератором
Vladimir (2010-08-01 21:33:00) [2]Удалено модератором
Примечание: Задай свой вопрос в отдельной ветке
kukuikar (2010-07-31 15:45:00) [3]уже можно успокоиться
Плохиш (2010-07-31 13:57:00) [4]Achtung, Partizanen. Feuer!!!
kukuikar (2010-07-31 12:37:00) [5]
> DVM © (31.07.10 11:49) [41]
понял, спасибо большое. буду копать дальше сам.
DVM (2010-07-31 11:49:00) [6]
> kukuikar © (31.07.10 09:58) [38]
> я не добавляю в цикле строки, а назначаю последней строчке
> новое значение на каждом шаге цикла
Я примерно понял что у тебя делается, напрное много-много строчек это уже обработанные файлы, да? А в последней строчке текущий обрабатываемый файл и там рядом с его именем типа процента выполнения, угадал?
Если так, то дам простой совет: не обновляй ListBox на каждой итерации цикла, обновляй через 1000 итераций или как то еще, смысла в очень частом обновлении да таком что листбокс перерисовываться не успевает и мерцает нет.
Короче то что я написал выше + двойная буфферизация и еще в идеале виртуальный режим полностью решат твою проблему.
kukuikar (2010-07-31 10:42:00) [7]
> Игорь Шевченко © (31.07.10 10:13) [39]
А.С. Пушкин
Игорь Шевченко (2010-07-31 10:13:00) [8]
> в данном случае листбокс отображает прогресс выполнения
> парсинга файла
О сколько нам открытий чудных
Готовят просвещенья дух.
И опыт, сын ошибок трудных,
И гений, парадоксов друг.
kukuikar (2010-07-31 09:58:00) [9]
> DVM © (30.07.10 17:58) [21]
дело в том что не будет в листбоксе 300000 строк.
в данном случае листбокс отображает прогресс выполнения парсинга файла, собственно говоря я не добавляю в цикле строки, а назначаю последней строчке новое значение на каждом шаге цикла:
ListBox1.Items[ListBox1.Items.Count - 1] := 'la-la-la - ' + IntToStr(i + 1);
_Юрий (2010-07-31 09:37:00) [10]Удалено модератором
Германн (2010-07-31 03:12:00) [11]Удалено модератором
Германн (2010-07-31 01:55:00) [12]Удалено модератором
Smile (2010-07-31 00:21:00) [13]Удалено модератором
KilkennyCat (2010-07-30 22:12:00) [14]
> Amoeba_ (30.07.10 18:02) [22]
>
>
> > 1) Так ли уж надо иметь в ListBox такое большое число
> элементов.
> > В них же неудобно ориентироваться будет.
>
> И не только неудобно, а просто невозможно.
ну эт вы напрасно, навигационности можно помочь, да и есть она там, хоть и в зачаточном состоянии.
но в целом да, смысла в визуальности такого громадного списка совершенно нет, если, конечно, не требуется его отобразить весь на громадном мониторе
KilkennyCat (2010-07-30 21:20:00) [15]Удалено модератором
KilkennyCat (2010-07-30 21:19:00) [16]Удалено модератором
Leonid Troyanovsky (2010-07-30 18:20:00) [17]
> Palladin © (30.07.10 18:16) [28]
> о... второй раз это не я...
Бывает.
А DVM никто не преследовал, IMHO, токмо развили мысль
о хранилище данных.
--
Regards, LVT.
Leonid Troyanovsky (2010-07-30 18:17:00) [18]Удалено модератором
Palladin (2010-07-30 18:16:00) [19]Удалено модератором
Palladin (2010-07-30 18:13:00) [20]Удалено модератором