Форум: "Базы";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
ВнизКак сделать индикацию процесса обработки данных??? Найти похожие ветки
← →
StenKz (2003-02-06 08:37) [0]Как сделать индикацию процесса обработки данных??? Пусть даже примерную…
Была мысль – взять допустим прогресс бар, и прописать например свойство
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
← →
Mitechka (2003-02-06 09:39) [1]Я писал для себя отдельный модуль он запускает отдельную форму. Форм сожет быть сколько угодно много, типа для процесс-подпроцесс. На форме может быть прогрессбар и список сообщений. Процесс можно попробовать (зависит от программы вызывающей) прервать пробуя закрыть форму индикатора. Если точно известно сколько всего можно использовать прогрессбар, если нет можно писать сообщнния типа "Сделано 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;
← →
Stenkz (2003-02-06 09:49) [2]Удалено модератором
Примечание: Личная переписка, используй для это емайл
← →
Соловьев (2003-02-06 09:52) [3]А как ты создаешь процес? Попробуй
ProgressBar.Max := Table.RecordCount;
while not Eof do
begin
...
ProgressBar.Position := ProgressBar.Position+1;
Next;
end;
← →
Stenkz (2003-02-06 10:03) [4]То Соловьев Это понятено...
Но у меня например, формируется отчет в эксел, а у компонента нет свойства ONProgress... Вот для такого случая как быть?
← →
Соловьев (2003-02-06 10:24) [5]у меня так сделано:
try
//тут код тот что выше
finally
//показываешь отчет
end;
← →
Stenkz (2003-02-06 11:15) [6]А если отчет формируется долго?
Как показать пользователю, что прога не висит а работает...
← →
Соловьев (2003-02-06 11:16) [7]Делаешь SplashForm где вешаешь свой прогрес бар или какую-нибудь еще анимацию...
← →
Stenkz (2003-02-06 11:27) [8]То Соловьев © (06.02.03 11:16)
Поясните пожайлуста, подробнее.
← →
Соловьев (2003-02-06 11:31) [9]Создаем свой класс - TSplashForm(аналог из RxLib или берем оттуда): там будет и прогресбар и анимация.
потом при нажатии кнопки "Отчет":
MySplsh := TSplashForm.Create;
try
...
//тут уже писано-переписано- формируем отчет
finally
MySplash.Free;
//показываем отчет
end;
← →
alexdbases (2003-02-07 10:11) [10]to Соловьёв плюс к форме.....Mysplash:=TMySplashForm.Create(Application<это тоже вроде как надо добавить>)
Ну и наконец
MySplash.Show;MySplash.Update..
И мы можем управлять контролами на MySplash....из другого модуля...)
← →
Stas (2003-02-07 10:24) [11]Попробуй свой процесс сделать дополнительным т.е в фоновом рижиме, тогда прога будет работать нормально, а процесс будет сам собой проходить в фоновом режиме. Создать->Дополнительный процесс
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c