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

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

Как сделать индикацию процесса обработки данных??? [D6, dBase, FoxPro]


StenKz ©   (2003-02-06 08:37:00) 

Как сделать индикацию процесса обработки данных??? Пусть даже примерную…
Была мысль – взять допустим прогресс бар, и прописать например свойство

TDM.TDepAfterScroll

Например
procedure TDM.TDepAfterScroll(DataSet: TDataSet);
begin
If FormOtch.PBA.Position=FormOtch.PBA.Max
Then FormOtch.PBA.Position:=0
Else FormOtch.PBA.StepIt;
end;

Но возникает трудность – получается как бы циклическая ссылка. Форма отчётов использует форму датамодуля. А при прописывании свойства AfterScroll форма датамодуля пытается управлять компонентом формы отчетов. При компиляции вылетает ошибка..

Форма FormOtch

implementation
Uses Datamod;

Форма Datamod
implementation
Uses FormOtch


Stas   (2003-02-07 10:24:00) [1]

Попробуй свой процесс сделать дополнительным т.е в фоновом рижиме, тогда прога будет работать нормально, а процесс будет сам собой проходить в фоновом режиме. Создать->Дополнительный процесс


alexdbases   (2003-02-07 10:11:00) [2]

to Соловьёв плюс к форме.....Mysplash:=TMySplashForm.Create(Application<это тоже вроде как надо добавить>)
Ну и наконец
MySplash.Show;MySplash.Update..
И мы можем управлять контролами на MySplash....из другого модуля...)


Соловьев   (2003-02-06 11:31:00) [3]

Создаем свой класс - TSplashForm(аналог из RxLib или берем оттуда): там будет и прогресбар и анимация.
потом при нажатии кнопки "Отчет":
MySplsh := TSplashForm.Create;
try
...
//тут уже писано-переписано- формируем отчет
finally
MySplash.Free;
//показываем отчет
end;


Stenkz   (2003-02-06 11:27:00) [4]

То Соловьев © (06.02.03 11:16)

Поясните пожайлуста, подробнее.


Соловьев   (2003-02-06 11:16:00) [5]

Делаешь SplashForm где вешаешь свой прогрес бар или какую-нибудь еще анимацию...


Stenkz   (2003-02-06 11:15:00) [6]

А если отчет формируется долго?
Как показать пользователю, что прога не висит а работает...


Соловьев   (2003-02-06 10:24:00) [7]

у меня так сделано:
try
//тут код тот что выше
finally
//показываешь отчет
end;


Stenkz   (2003-02-06 10:03:00) [8]

То Соловьев Это понятено...

Но у меня например, формируется отчет в эксел, а у компонента нет свойства ONProgress... Вот для такого случая как быть?


Соловьев   (2003-02-06 09:52:00) [9]

А как ты создаешь процес? Попробуй

ProgressBar.Max := Table.RecordCount;
while not Eof do
begin
...
ProgressBar.Position := ProgressBar.Position+1;
Next;
end;


Stenkz   (2003-02-06 09:49:00) [10]

Удалено модератором
Примечание: Личная переписка, используй для это емайл


Mitechka   (2003-02-06 09:39:00) [11]

Я писал для себя отдельный модуль он запускает отдельную форму. Форм сожет быть сколько угодно много, типа для процесс-подпроцесс. На форме может быть прогрессбар и список сообщений. Процесс можно попробовать (зависит от программы вызывающей) прервать пробуя закрыть форму индикатора. Если точно известно сколько всего можно использовать прогрессбар, если нет можно писать сообщнния типа "Сделано 300", и перетирать число, 400, 500 ... или дописывать в список типа "делаю то, сделала, теперь делаю это". Жаль, что нельзя сюда кинуть скриншот :( А так, если интересно и не лень разбираться, то напиши - пришлю код по почте. Размер кода 11К, комментарии внутри вроде бы есть :) Пример использования из текста программы:

ProcessIndOn("Получение данных","",0,2);
i:=1;
while not ProcessIndStop and (i<=Amount) do
begin
ProcessInd(i/Amount);
if V[i]<0 then ProcessIndMes("Негативное значение в ячейке "+IntToStr(i)");
...
inc(i);
end;
ProcessIndOff;


Наверх

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