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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2007, 11:44   #11
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Alex21, извини, но не понял твоего последнего сообщения...
Македонский вне форума Ответить с цитированием
Старый 17.08.2007, 11:53   #12
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Gauge1.Progress имеет тип Integer, 32-бит, со знаком.
Т.е. его диапазон = от –2147483648..до 2147483647
(2^32)-1=4294967295 - всего, из них половина положительных, половина отрицательных.
Есть еще тип Cardinal 0..4294967295 32-бит, без знака.

Это я к тому, что 700 тыс. - это не предел.
Пишем в Delphi слово INTEGER наводим на него указатель, и жмем F1.

//////////////
Ускорить? А насколько медленно работает?
Alex21 вне форума Ответить с цитированием
Старый 17.08.2007, 12:01   #13
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Насчет предела я только предположил, потому что с маленькими файлами все в шоколаде, а с большими процесс не отображается, вот я и подумал, что gauge может иметь какие-либо ограничения...

А как вставил в код Application.ProcessMessages, программа стала грузить данные из файла раз в 100 медленнее...
Македонский вне форума Ответить с цитированием
Старый 17.08.2007, 12:03   #14
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Советую почитать про Application.ProcessMessages
Alex21 вне форума Ответить с цитированием
Старый 17.08.2007, 12:24   #15
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

ok, сапибо за помощь!
Македонский вне форума Ответить с цитированием
Старый 17.08.2007, 12:44   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Александр, я бы на твоем месте заменил процедуру чтения из файла на что-нить побыстрее типа TFileStream.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.08.2007, 14:12   #17
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Раз медленнее стало значит отрисовка графика затормаживает. Тут надо выбрать одно из двух - либо не показывать прогресс, либо в цикле рисовать график в памяти а уже после цикла отобразить.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 17.08.2007, 15:28   #18
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от Македонский Посмотреть сообщение
Есть текстовый, нужно чтобы программа прочитала строки в файле и при этом работал Gauge или ProgressBar, но проблема состоит в том, что файл очень большой (сотни тысяч строк) и почему-то Gauge имеет ограничение максимального значения и, соответственно, не работает... Не подскажете как в таких случаях отображать подобный процесс?
Я сделал бы так:

procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
MyFile: TStringList;
begin
//Загружаю файл в операвтиную память в переменную MyFile
MyFile.LoadFromFile(OpenDialog1.Fil eName);
i:=0
ProgressBar1.Min:=0
ProgressBar1.Max:=MyFile.Count;
for i:=ProgressBar1.Min to ProgressBar1.Max do
begin
ProgressBar1.Position:=i;
//а дальше обрабатываею i-тую строку из MyFile
...
end;
end;

Я думаю, так должно быть быстрее потому как прога будет работать с оперативкой, а не с диском, как у тебя.

А прогрессбар я запускал на перебор БД с 5 000 000 записей и никаких проблем не было.

PS: кстати, прорисовка графики занимает действительно много времени. Поэтому график лучше строить на невидимой форме, а
по окончании построения сделать ее видимой.

PPS: В свое время при написании текстового редактора я столкнулся,
с тем, что процедура поиска, написанная мною, стала глючить на
файлах большого объема. Тогда я для переменной, указывающей позицию в строке назначил вместо типа integer тип cardinal (целое без знака). Помогло
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 17.08.2007, 15:28   #19
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от Македонский Посмотреть сообщение
Есть текстовый, нужно чтобы программа прочитала строки в файле и при этом работал Gauge или ProgressBar, но проблема состоит в том, что файл очень большой (сотни тысяч строк) и почему-то Gauge имеет ограничение максимального значения и, соответственно, не работает... Не подскажете как в таких случаях отображать подобный процесс?
Я сделал бы так:

procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
MyFile: TStringList;
begin
//Загружаю файл в операвтиную память в переменную MyFile
MyFile.LoadFromFile(OpenDialog1.Fil eName);
i:=0
ProgressBar1.Min:=0
ProgressBar1.Max:=MyFile.Count;
for i:=ProgressBar1.Min to ProgressBar1.Max do
begin
ProgressBar1.Position:=i;
//а дальше обрабатываею i-тую строку из MyFile
...
end;
end;

Я думаю, так должно быть быстрее потому как прога будет работать с оперативкой, а не с диском, как у тебя.

А прогрессбар я запускал на перебор БД с 5 000 000 записей и никаких проблем не было.

PS: кстати, прорисовка графики занимает действительно много времени. Поэтому график лучше строить на невидимой форме, а
по окончании построения сделать ее видимой.

PPS: В свое время при написании текстового редактора я столкнулся,
с тем, что процедура поиска, написанная мною, стала глючить на
файлах большого объема. Тогда я для переменной, указывающей позицию в строке назначил вместо типа integer тип cardinal (целое без знака). Помогло
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 17.08.2007, 16:41   #20
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Спасибо, братцы! Век не забуду!
Есть всё же добрые люди на свете...
Македонский вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос про Gauge Diamand Компоненты Delphi 7 28.11.2013 13:11
ProgressBar Makarov Компоненты Delphi 3 04.02.2008 22:42
ProgressBar Rahim1993 Общие вопросы Delphi 10 20.01.2008 21:28
ProgressBar pentiumForever Компоненты Delphi 2 07.09.2007 13:33