-
Пример...
При попытке остановить Timer из Button1 вылетает ошибка EAccessViolation.
Подскажите пожалуйста, как можно решить данную проблему...
type
TMyControl = class(TCustomControl)
private
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
end;
Var
MyControl : TMyControl;
constructor TMyControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Timer1 := TTimer.Create(Self);
Timer1.Interval := 5000;
Timer1.OnTimer := Timer1Timer;
end;
procedure TMyControl.Timer1Timer(Sender: TObject);
begin
showmessage('1');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TMyControl.Create(nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//!!!! Выдается ошибка !!!
MyControl.Timer1.Enabled:= False;
end;
-
> denmin (14.04.2008 15:47:00) [0]
Проблема в MyControl.глобальная переменная, ничем не защищена.
-
> inherited Create(AOwner);
> Timer1 := TTimer.Create(Self);
А таймер после уничтожения объекта точно уничтожиться ?
> //!!!! Выдается ошибка !!! MyControl.Timer1.Enabled:= False;
MyСontrol:= TMyControl.Create(nil);
-
> Проблема в MyControl.глобальная переменная, ничем не защищена.
В неё значение от TMycontrol.Create не записываеться.
-
Спасибо большое tesseract ©
> MyСontrol:= TMyControl.Create(nil);
помогло...
-
> помогло...
Разбивать объекты не забудь - утечка будет нехилая.
-
> tesseract (14.04.2008 15:51:02) [2]
Ну вот продал секрет
-
> denmin (14.04.2008 15:59:04) [4]
Это временно, глобальность ты так и не убрал.
-
> Это временно, глобальность ты так и не убрал.
Да там он половину не убрал. Таймер не разрушиться, сам компонент тоже. Глобальность тут - наиментшее из всех зол ИМХО.
-
> Anatoly Podgoretsky © (14.04.08 16:33) [7]
Думаю, автор еще не догадывается, что экземпляров TForm1 можно создать более одного. До такой попытки ошибка не проявится, можно быть спокойным :)
-
Чисто спортивный интерес - зачем для того, чтобы создать простой таймер, надо непременно вместе с ним соорудить еще некий таинственный объект-"обертку" MyControl ?
-
> tesseract (14.04.2008 16:34:08) [8]
Намекаешь - переписать все нафиг.
-
> Намекаешь - переписать все нафиг.
Намекаю почитать что - нибудь :-)