Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как нормально следить за счётчиком!? [D6, WinXP]


Volf_555 ©   (2005-12-09 18:50:00) 

Вобщем - суть в слудующем:

Есть прога, смысл работы какой заключается в удалении повторяющихся строк. Если работать с мелкими файлами - проблем не возникает - всё обрабатывается сравнительно быстро.

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

Для этих целей я создал вторую форму, которая должна во время обработки огромного файла показывать номер значения, обрабатываемый в данный момент+диаграмма, по которой будет видно сколько процентов уже обработано.

Но когда я запускаю обработчик большого файла, то появляется вторая форма без компонентов и всё зависает... И, соответственно, не видно обрабатываемое значение + проценты

Вот код:

with form2 do
begin
 Show;
 Label5.Caption:= 'Файл: '+ExtractFileName(OpenDialog1.FileName);
 Label3.Caption:=IntToStr(memo2.Lines.Count);
 gauge1.MaxValue:=memo2.Lines.Count;
end;

if form2.Showing then
begin
 for a:=0 to memo2.Lines.Count-1 do
 for a1:=0 to memo2.Lines.Count-1 do
 begin
  if memo2.Lines.Strings[a1]=memo2.Lines.Strings[a] then
   memo2.Lines.Delete(a1);
   form2.label4.Caption:=IntToStr(a);
 end;
end;


Как подскажите решить проблему?
ЗЫ: существуют же ведь программы, в которых эта возможность реализована!


Volf_555   (2005-12-09 19:09:00) [1]

Thank - работает!


Плохиш   (2005-12-09 19:05:00) [2]

В цикл вставь.


MU   (2005-12-09 19:04:00) [3]

в цикл еще вставь


Volf_555   (2005-12-09 19:03:00) [4]

Написал так:

with form2 do
begin
Show;
Label5.Caption:= 'Файл: '+ExtractFileName(OpenDialog1.FileName);
Label3.Caption:=IntToStr(memo2.Lines.Count);
gauge1.MaxValue:=memo2.Lines.Count;
end;

Application.ProcessMessages

if form2.Showing then
begin
for a:=0 to memo2.Lines.Count-1 do
for a1:=0 to memo2.Lines.Count-1 do
begin
 if memo2.Lines.Strings[a1]=memo2.Lines.Strings[a] then
  memo2.Lines.Delete(a1);
  form2.label4.Caption:=IntToStr(a);
end;
end;


В таком случае вторая форма показывается, но значения меняться не хотят. И всё-равно идёт подвисание как главной, так и второй форм


Плохиш   (2005-12-09 19:02:00) [5]


> Volf_555   (09.12.05 18:59) [2]
> А подробней?

Хочешь, чтобы я за тебя F1 нажимал и справку сюда постил? Если модератор разрешение даст, скопирую сюда описание из моейсправки, правда ты там всё-равно ничего не поймёшь.


Volf_555   (2005-12-09 18:59:00) [6]

А подробней?


Плохиш   (2005-12-09 18:52:00) [7]

Application.ProcessMessages


Наверх

Титульная страница Поиск, карта сайта Написать письмо