Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];

Вниз

Timer   Найти похожие ветки 

 
SergeyM ©   (2004-06-11 11:51) [0]

Ув. мастера у меня такое ощущение что таймер не отключается, при выполнении следующего кода

procedure TForm7.Timer2Timer(Sender: TObject);
begin
inc(time);
Gauge1.Progress:=time;
if Gauge1.Progress = Gauge1.MaxValue then
begin
Gauge1.ForeColor:= clRed;
if RadioGroup1.ItemIndex=0 then
ShowMessage("Неправильно. Правильное слово: "+DataModule1.ADOTable3rword.AsString)
else
ShowMessage("Неправильно. Правильное слово: "+DataModule1.ADOTable3eword.AsString);
//Timer2.Interval:=0;
Timer2.Enabled:=false;
end;
end;

появившееся сообщение начинает маргать и не реагирует на нажатие кнопки ОК. Как видно из кода я пробовал его отключить двумя способами но ни что не помогло. Может вы поймете в чем дело и подскажите.


 
Sandman25 ©   (2004-06-11 11:58) [1]

Timer2.Enabled:=false;

Должен быть первой строчкой обработчика


 
kudatsky   (2004-06-11 12:00) [2]

Попытайся добавить в конец
Application.ProcessMessages;


 
Anatoly Podgoretsky ©   (2004-06-11 12:04) [3]

Нет только оба предлодени и конечно не в начло, а после if


 
SergeyM ©   (2004-06-11 12:05) [4]

-->Попытайся добавить в конец
-->Application.ProcessMessages;

Если добавить как есть то ничего не получается

-->Должен быть первой строчкой обработчика

Тогда ничто не обработается


 
Sandman25 ©   (2004-06-11 12:06) [5]

[3] Anatoly Podgoretsky ©   (11.06.04 12:04)

Согласен. Общая идея состоит в том, чтобы сделать это как можно раньше, чтобы таймер не успел сработать еще раз.


 
Sandman25 ©   (2004-06-11 12:06) [6]

[4] SergeyM ©   (11.06.04 12:05)

Советы даются, чтобы над ними думать, а не им следовать :)


 
SergeyM ©   (2004-06-11 12:08) [7]

Если добавить в

ShowMessage("Неправильно. Правильное слово: "+DataModule1.ADOTable3eword.AsString);
//Timer2.Interval:=0;
end;
Timer2.Enabled:=false;
Application.ProcessMessages;
end;

то заполнение gauge прекратиться не начавшись


 
Anatoly Podgoretsky ©   (2004-06-11 12:12) [8]

SergeyM ©   (11.06.04 12:08) [7]
Ты бы попробовал вникнуть в его код


 
SergeyM ©   (2004-06-11 12:13) [9]

Все я все решил надо было отключить таймер
после
if Gauge1.Progress = Gauge1.MaxValue then
begin
Timer2.Enabled:=false;
и все сработало
P.S.
может Анатолий Подгорецкий это и имел в виду.


 
Anatoly Podgoretsky ©   (2004-06-11 12:16) [10]

Я только ошибся, не его а в свой.
Предложение смотри от Sandman25 с моей поправкой, что ты и реализовал сейчас. В твоем же коде было нарушение логики.


 
Sandman25 ©   (2004-06-11 12:25) [11]

[10] Anatoly Podgoretsky ©   (11.06.04 12:16)

Таймер срабатывал, пока приложение отображало модальный диалог и ждало реакции пользователя - это не нарушение логики ИМХО.


 
han_malign ©   (2004-06-11 12:52) [12]

>Таймер срабатывал, пока приложение отображало модальный диалог и ждало реакции пользователя - это не нарушение логики ИМХО.
- пока приложение отображало модальный диалог и ждало реакции пользователя - сообщения таймера накапливались в очереди, и пока не закроются все модальные диалоги, возникающие на каждом событии таймера(а чем дольше ждешь тем больше их накопится в очереди), до Timer2.Enabled:=false; не дойдет. А все модальные диалоги закроются только в том случае, если жать на OK, быстрее таймера...


 
Sandman25 ©   (2004-06-11 12:54) [13]

[12] han_malign ©   (11.06.04 12:52)

Это не нарушение логики. Особенно если интервал таймера равен нескольким часам.


 
Sandman25 ©   (2004-06-11 12:56) [14]

Кстати, я обычно иначе делаю

procedure ...OnTimer(..);
begin
 Assert(Sender is TTimer);
 TTimer(Sender).Enabled := False;
 try
 //...
 finally
   TTimer(Sender).Enabled := True;     // можно с if ...
 end;
end;


 
han_malign ©   (2004-06-11 13:00) [15]

procedure TGauge.SetProgress(Value: Longint);
var
 TempPercent: Longint;
begin
 TempPercent := GetPercentDone;  { remember where we were }
 if Value < FMinValue then
   Value := FMinValue
 else if Value > FMaxValue then
   Value := FMaxValue;
 if FCurValue <> Value then
 begin
   FCurValue := Value;
   if TempPercent <> GetPercentDone then { only refresh if percentage changed }
     Refresh;
 end;
end;

- т.о. только Sandman25 ©   (11.06.04 11:58) [1] - "спасет отца русской демократии"


 
Anatoly Podgoretsky ©   (2004-06-11 13:21) [16]

Sandman25 ©   (11.06.04 12:25) [11]
Это нарушение логики, по тексту видно, что он хотел больше не иметь событий таймера при достижении MAX, вместо этого он продолжал их получать до закрытия модального диалога.


 
Sandman25 ©   (2004-06-11 13:55) [17]

[16] Anatoly Podgoretsky ©   (11.06.04 13:21)

По тексту видно, что он их не хотел получать после закрытия модального диалога :)


 
Anatoly Podgoretsky ©   (2004-06-11 13:59) [18]

Неожиданный, но тоже взгляд :-)


 
Sandman25 ©   (2004-06-11 14:00) [19]

[18] Anatoly Podgoretsky ©   (11.06.04 13:59)

Мне в процессе обсуждения данного вопроса пришла в голову мысль, что в чужой программе никогда не бывает нарушения логики. Просто логика другая.



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

Форум: "Основная";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.057 c
8-1081334219
ЁПРСТ
2004-04-07 14:36
2004.06.27
Как нарисовать на форме текст без фона?


8-1080665837
DelBoy
2004-03-30 20:57
2004.06.27
Создание Лоссо


14-1086949113
Polevi
2004-06-11 14:18
2004.06.27
реклама


14-1086757862
Baks
2004-06-09 09:11
2004.06.27
Вопрос на зацепку (скорее на скорость ответа)


1-1086845576
sergt
2004-06-10 09:32
2004.06.27
DateTimePicker





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский