Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2015, 19:36   #21
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Господа гуру делфи, не гоните на автора а лучше помогите ему понять как правильно писать на Делфи.
-------------
Автору.
Чё то я не понимаю твою логику к решению задачи.
Если используется один и тот же обработчик в нескольких таймерах, и в обработчике валится сам таймер, то нужно так и писать


Код:
procedure TForm1.TimerProc(Sender: TObject);
begin
 //    FreeAndNil(Timer);

  FreeAndNil(TTimer(Sender));
  Inc(Q);
  Self.Caption := IntToStr(Q);
end;
При таком раскладе постоянно отрабатывает TimerProc. Почему таймер не "умирает"?
а не тулить переменную


--------
и вообще, в твоём случае лучше писать вот так


Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TTimer.Create(nil) do
  begin
    Interval := 100;
    OnTimer := TimerProc;
     //  Enabled := True; это не нужно, таймер по умолчанию и так True
  end;  
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to 1 do
  begin
  //  Button1.OnClick(Self); // при клике в обработчик передаётся Button1
    Button1.OnClick(Button1); 
  end;
end;

procedure TForm1.TimerProc(Sender: TObject);
begin
  FreeAndNil(TTimer(Sender))
  Inc(Q);
  Caption := IntToStr(Q);
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 08.08.2015 в 19:40.
JUDAS вне форума Ответить с цитированием
Старый 08.08.2015, 19:38   #22
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
Восклицание

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Доброго времени суток!
Есть
...
Почему таймер не "умирает"?
Потому что где бы у вас ни была объявлена переменная Timer - при нескольких нажатиях кнопки подряд все более старые затираются.

А цель-то какая вообще?

Как это вижу я. Ошибка номер один:
Цитата:
procedure TForm1.Button1Click(Sender: TObject);
var Timer: TTimer;
begin
Timer:=TTimer.Create(Self);
Timer.Interval := 100;
Timer.OnTimer := TimerProc;
Timer.Enabled := True;
end;
Ошибка номер два:
Цитата:
procedure TForm1.TimerProc(Sender: TObject);
begin
TTimer(Sender).Enabled:=False; // На всякий случай, бывает полезным
FreeAndNil(TTimer(Sender)); // Но я бы делал: TTimer(Sender).Free;
Inc(Q);
Self.Caption := IntToStr(Q); // И не надо никаких Self
end;
ResourceSpace вне форума Ответить с цитированием
Старый 08.08.2015, 19:42   #23
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Код:
Timer:=TTimer.Create(Self);
не ошибка. Вопрос, как создать таймер внутри своего класса который не базируетс на предке TComponent?
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 08.08.2015, 19:46   #24
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Автотору я думаю достатоно дали ответов, он уже наверно понял в чем его основная ошибка во FreeAndNil(Timer) а нужно FreeAndNil(TTimer(Sender)) либо TTimer(Sender).free

Последний раз редактировалось Aliens_wolfs; 09.08.2015 в 19:05.
Aliens_wolfs вне форума Ответить с цитированием
Старый 08.08.2015, 20:00   #25
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Лучше придерживаться (и приучиваться) чтоб у всех динамически создаваемых объектов был правильный владелец.
Цитата:
Вопрос, как создать таймер внутри своего класса который не базируетс на предке TComponent?
Тут есть TForm и всё происходит в нём. Значит владелец должен быть он. А прочие ситуации надо отдельно думать. Бывает что вообще отдельный поток лучше.
Код:
Button1.OnClick(Self);
Это не заметил. Третья ошибка. Но тут бы я рекомендовал:
Код:
Button1.Click;
ResourceSpace вне форума Ответить с цитированием
Старый 08.08.2015, 20:06   #26
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Вопрос, как создать таймер внутри своего класса который не базируетс на предке TComponent?
да никак.
Код:
Timer:=TTimer.Create(nil); // а можно и application, только смысл?
главное - освободить память из-под него, когда он не нужен становится.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 08.08.2015, 20:17   #27
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Что за прикол убивать себя в своем событии? Даже если отработает не правильно это. Хотя бы потому, что после убиения будет работать код мертвого объекта
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 08.08.2015 в 20:19.
Аватар вне форума Ответить с цитированием
Старый 08.08.2015, 21:04   #28
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
да никак.
создаю вот так,
xxx := TTimer.Create(nil)
убиваю
xxx.Free;
работает по сей день
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамически созданный TDBLookUpComboBox Scorpuha БД в Delphi 13 16.01.2014 19:59
Динамически созданный Control (PictureBox) itea4you.ru C# (си шарп) 4 27.10.2013 12:39
Обработчик на динамически созданный компонент lexo Общие вопросы Delphi 5 01.06.2013 20:27
Динамически созданный обьект, процедуры heart Общие вопросы Delphi 3 09.05.2009 17:32
Динамически созданный tabSheet S@fer Общие вопросы Delphi 7 08.04.2009 12:03