Показать сообщение отдельно
Старый 26.02.2007, 16:10   #10  
art06 is offline
art06
Участник
Аватар для art06
 
192 / 10 (1) +
Регистрация: 11.08.2006
Цитата:
Сообщение от romeo Посмотреть сообщение
Цитата:
Сообщение от art Посмотреть сообщение
Я хотел узнать - как в одном прогрессе @1@@@@@@@@.
А, вы предлагаете вариант с один диалоговым окном , и несколькими прогрессами
@1@@@@@@@@
@2@@@@@@@@
1 Игнорируйте вложенные циклы. Обновляйте только в первом.
2 Посчитать колво обрабатываемых записей во всех циклах и это считать общим COUNTом. В последнем вложенном цикле наращивать значение счетчика, сдвигая значение прогресса.

1) если кол-во в первом цикле будет = 1. Тогда , если вся выборка займет например час - то, пользователь увидит 0%, и через час 100%
2) Как я могу посчитать кол-во во всех циклах - если внутренние циклы постоянно имеют разное кол-во записей.

Цитата:
Сообщение от randrews Посмотреть сообщение
Цитата:
Сообщение от art Посмотреть сообщение
Добрый день.
Dial.OPEN('Выполнение @1@@@@@@@');
I_COUNT := Employee1.COUNT;
Repeat
I := I + 1;
Dial.UPDATE(1,ROUND((I / I_COUNT * 10000),1));
Until
Цитата:
Сообщение от art Посмотреть сообщение
И хотел узнать как можно в одном прогрессе отобразить всё
Зависит от того, какой код будет во вложенных циклах.
Для общего случая -
Вариант 1) Если есть возможность быстро вычислить сумарное количество итераций, то Вы сами выше напеисали код.
Вариант 2) Остается только неравномерное движение прогрес бара.
Например
Код:
Dial.OPEN('Выполнение @1@@@@@@@');
I_COUNT := Employee1.COUNT;
REPEAT
   I := I + 1;
   J_COUNT := SomeTable.COUNT;  
   J :=  0;
   REPEAT
	  J := J + 1; 
	  Dial.UPDATE(1,ROUND(((I+J / J_COUNT ) / I_COUNT * 10000),1));
   UNTIL SomeTable.NEXT = 0;
UNTIL Employee1.NEXT = 0;
P.S. J обнулить забыл Ну и FIND если надо поставьте

Получается прогресс будет прыгать , то вперед, то назад ?