Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > простой счётчик и вывод его на форму


Автор: h2o 19.2.2009, 18:35
Может я туплю... но уже час бьюсь с проблемой и не получается решить.. самому смешно, но...
Проблема следующая: В проге я вывожу заставку ожидания(другая форма). на заставке тупо надпись и бежит время ожидания. По срабатыванию таймера в 1 секенду обновляется прошедшее время на экране(тоже на секунду). т.е. фактически у меня там счётчик секунд. i,ii : integer;
Делфи 2009 код: 
Код

procedure TSplashScreen.Timer1Timer(Sender: TObject);
begin
 inc(i); //секунды
 if i=60   //это чтобы вместо 0:60 было 1:00
  then
   begin
    inc(ii); //минуты
    i:=0
   end;
 if i<10
  then Label2.Caption:=(IntToStr(ii)+':0'+IntToStr(i)) //для формата 0:01
  else Label2.Caption:=(IntToStr(ii)+':'+IntToStr(i));  //для формата 0:10
  SplashScreen.Update;
end;

Вместо того чтобы на форме прибавлять по 1й секунде - на одно срабатыване таймера (которое 1 секунда (interval=1000)) счётчик увеличивается на 2.
т.е. за 1 секунду счтчик прибавляется на 2 единицы а не на 1. И хз почему?
вместо того чтобы выводить:
0:01
0:02
0:03
0:04
0:05
0:06 и т.д.
на форме каждую секунду выходит:
0:02
0:04
0:06
0:08
0:10
0:12 и т.д.

кто-нибудь подскажите почему?

Автор: Данкинг 19.2.2009, 19:33
Application.ProcessMessages добавить попробуй после обновления Label.

Автор: Antony41 19.2.2009, 19:59
Код

//Глобальные переменные
var
ss, mm, hh:integer;


procedure TForm1.Timer1Timer(Sender: TObject);
var
s,m,h:string;
begin
//Сам таймер
if hh<23 then
    if mm<59  then
       if ss<59 then
          inc(ss)
       else
          begin
            ss:=0;
            inc(mm);
          end
    else
      begin
         mm:=0;
         inc(hh);
      end
else
  hh:=0;
        //превращаем в строку если один множитель, то дописываем 0 в начало перед строкой
        //иначе оставляем как есть
        if hh<10 then
          h:='0'+IntToStr(hh) else H:=IntToStr(hh);
        if mm<10 then
          m:='0'+IntToStr(mm) else M:=IntToStr(mm);
        if ss<10 then
          s:='0'+IntToStr(ss) else S:=IntToStr(ss);
//где и как хочешь отобразить
Caption:=H+':'+M+':'+S;
//задаём интервал и выполняем событие
if (mm=2) and (ss=25) then
  begin
    Timer1.Enabled:=False;
    ShowMessage('Запуск формы');
  end;
end;




Автор: h2o 19.2.2009, 22:15
Данкинг это не помогает.. темболее SplashScreen.Update; стоит - что тоже самое значене имеет.

Antony41 функция такаяже.. принцип тот же. но проверю завтра. спасибо.

Фишка. Дома на Д2007 когда таймер на основной форме - всё работает как надо. и моя функция.. и Antony41

а на работе на Д2009, я вывожу по среди проекта  на сплэш-форме... и не работает.. (причем кажется что раньше всё работало...)

в чём может быть дело?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)