Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.26;
Скачать: CL | DM;

Вниз

Формирование запроса и параллельная работа таймера.   Найти похожие ветки 

 
LordBTR   (2004-01-15 15:18) [0]

Помогите, пожалуйста. Пытаюсь показать юзеру время, которое прошло с момента вызова печати отчета до собственно самой печати.
На форме есть: кнопка "Печать", таймер и label. Обработчик при нажатии кнопки "Печать":
procedure TfmReport.bbtnPrintClick(Sender: TObject);
var
Day, Month, Year:Word;
begin
vBTime:=Time; //Отлавливаем время нажатия кнопки
lbl.Caption:="0:00:00"; //Обнуляем надпись
DMReport.qryOrder6.Open; //Открываем запрос
DMReport.rOrder6.DeviceType:="Screen";
DMReport.rOrder6.Print; //Показываем отчет
end;

Обработчик таймера (Timer.Interval=1000, т.е. 1 сек):
procedure TfmReport.TimerReportTimer(Sender: TObject);
begin
lbl.Caption:=TimeToStr(Time-vBTime); //Надпись соответствует
//времени прошедшему
//после нажатия "Печать"
end;

И вот ведь незадача - надпись показывает "0:00:00", а следующее значение выводится только после отображения отчета, т.е. все время пока формируется запрос (1-2 минуты) имеем "0:00:00" и только потом сразу "0:01:35". Хотелось бы ежесекундное приращение времени, а его нет... :(

Где я не прав?


 
Карелин Артем ©   (2004-01-15 15:22) [1]

var Time1,Time2:TDateTime;
.............
Time1:=Now;
Что-там хряпает долго в компе;
Time2:=Now;
Разница между Time1 и Time2 и будет интервалом.


 
Семен Сорокин ©   (2004-01-15 15:24) [2]

Где я не прав?
везде, у тебя это получится только тогда, когда вот это:
DMReport.qryOrder6.Open;
DMReport.rOrder6.DeviceType:="Screen";
DMReport.rOrder6.Print;
будет работать не в основном потоке.
Думай нужно ли тебе это, или пользователь все-таки засечет время секундомером :)


 
Ega23 ©   (2004-01-15 15:26) [3]

Application.ProcessMessages ?


 
Семен Сорокин ©   (2004-01-15 15:28) [4]

Ega23 © (15.01.04 15:26) [3]
не поможет, если запрос полторы минуты открывается, и не получится красивого "Хотелось бы ежесекундное приращение времени"


 
Ega23 ©   (2004-01-15 15:35) [5]

Вопрос другой, после открытия запроса мы придём в обработчик OnTimer? Если придём, то может это перерисовка лэйбла не проходит? А если не придём, то тогда ходу, тогда похоже
> Семен Сорокин © (15.01.04 15:24) [2]


 
Digitman ©   (2004-01-15 15:38) [6]


> LordBTR


выноси работу с отчетом в доп.код.поток ... тогда осн.код.поток будет способен "рисовать" в запланированные тобой моментыц хоть время хоть самого черта


 
LordBTR   (2004-01-15 15:44) [7]

>> Ega23 © (15.01.04 15:35) [5]
В OnTimer попадаем до Open и после, но все время пока "Что-там хряпает долго в компе;" в OnTimer не попадаем. Да забыл сказать, что в OnTimer-e lbl.Refresh есть, но не помогает.
Боюсь все-таки без доп. потока не обойтись, а тогда игра не стоит свеч и лучше уж "пользователь все-таки засечет время секундомером :)".
Скажите точно, без доп. потока никак?


 
Ega23 ©   (2004-01-15 15:46) [8]


> но все время пока "Что-там хряпает долго в компе;" в OnTimer
> не попадаем.

Тады поток...


 
Digitman ©   (2004-01-15 15:49) [9]


> LordBTR



> без доп. потока никак?


смотря что является источником данных для формирования НД


 
LordBTR   (2004-01-15 16:11) [10]

Digitman © (15.01.04 15:49) [9]
Источником данных является СУБД Oracle 9i.


 
Digitman ©   (2004-01-15 16:14) [11]


> LordBTR (15.01.04 16:11) [10]
> Источником данных является СУБД Oracle 9i.


это - не источник

я имел ввиду некий ODBC-драйвер, который, согласно документации к нему, позволяет асинхронные обращения к СУБД


 
LordBTR   (2004-01-15 16:44) [12]

Digitman © (15.01.04 16:14) [11]
Если Вы правильно поняли - я не профи и про ODBC знаю совсем мало, но думаю наличие оного не спасет, т.к. блокировка выполнения OnTimer до окончания выполнения запроса к СУБД происходит на уровне приложения. Мне кажется так...
Но, если я ошибаюсь, то, если можно, по-подробнее про этот драйвер или линк на инфу.



Страницы: 1 вся ветка

Текущий архив: 2004.01.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
14-83233
Романов Р.В.
2004-01-06 08:42
2004.01.26
Fat32 -> NTFS


6-83219
Сетевик
2003-11-24 07:21
2004.01.26
Как получить IP машины в сети если извесно только название ??


1-83200
Zamik
2004-01-14 10:08
2004.01.26
Преобразование в DOS


14-83283
asdqwer
2004-01-06 12:20
2004.01.26
Dragon Dictate 2.5


7-83291
Gang
2003-10-09 17:52
2004.01.26
CTRL+ALT+DEL