![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обратится к компоненту созданному через TCustomControl [D7, Win95/98, WinME, NT4, WinXP]
denmin © (2008-04-14 15:47:00)Пример...
При попытке остановить 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;
tesseract (2008-04-15 13:54:00) [1]
> Намекаешь - переписать все нафиг.
Намекаю почитать что - нибудь :-)
Anatoly Podgoretsky (2008-04-15 12:16:00) [2]> tesseract (14.04.2008 16:34:08) [8]
Намекаешь - переписать все нафиг.
MsGuns (2008-04-14 16:54:00) [3]Чисто спортивный интерес - зачем для того, чтобы создать простой таймер, надо непременно вместе с ним соорудить еще некий таинственный объект-"обертку" MyControl ?
evvcom (2008-04-14 16:38:00) [4]
> Anatoly Podgoretsky © (14.04.08 16:33) [7]
Думаю, автор еще не догадывается, что экземпляров TForm1 можно создать более одного. До такой попытки ошибка не проявится, можно быть спокойным :)
tesseract (2008-04-14 16:34:00) [5]
> Это временно, глобальность ты так и не убрал.
Да там он половину не убрал. Таймер не разрушиться, сам компонент тоже. Глобальность тут - наиментшее из всех зол ИМХО.
Anatoly Podgoretsky (2008-04-14 16:33:00) [6]> denmin (14.04.2008 15:59:04) [4]
Это временно, глобальность ты так и не убрал.
Anatoly Podgoretsky (2008-04-14 16:32:00) [7]> tesseract (14.04.2008 15:51:02) [2]
Ну вот продал секрет
tesseract (2008-04-14 16:00:00) [8]
> помогло...
Разбивать объекты не забудь - утечка будет нехилая.
denmin (2008-04-14 15:59:00) [9]Спасибо большое tesseract ©
> MyСontrol:= TMyControl.Create(nil);
помогло...
tesseract (2008-04-14 15:52:00) [10]
> Проблема в MyControl.глобальная переменная, ничем не защищена.
В неё значение от TMycontrol.Create не записываеться.
tesseract (2008-04-14 15:51:00) [11]
> inherited Create(AOwner);
> Timer1 := TTimer.Create(Self);
А таймер после уничтожения объекта точно уничтожиться ?
> //!!!! Выдается ошибка !!! MyControl.Timer1.Enabled:= False;
MyСontrol:= TMyControl.Create(nil);
Anatoly Podgoretsky (2008-04-14 15:50:00) [12]> denmin (14.04.2008 15:47:00) [0]
Проблема в MyControl.глобальная переменная, ничем не защищена.