Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.29;
Скачать: CL | DM;

Вниз

Как обратится к компоненту созданному через TCustomControl   Найти похожие ветки 

 
denmin   (2008-04-14 15:47) [0]

Пример...

При попытке остановить 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;


 
Anatoly Podgoretsky ©   (2008-04-14 15:50) [1]

> denmin  (14.04.2008 15:47:00)  [0]

Проблема в MyControl.глобальная переменная, ничем не защищена.


 
tesseract ©   (2008-04-14 15:51) [2]


>  inherited Create(AOwner);  
> Timer1 := TTimer.Create(Self);


А таймер после уничтожения объекта точно уничтожиться ?


> //!!!! Выдается ошибка !!!  MyControl.Timer1.Enabled:= False;


MyСontrol:= TMyControl.Create(nil);


 
tesseract ©   (2008-04-14 15:52) [3]


> Проблема в MyControl.глобальная переменная, ничем не защищена.


В неё значение от TMycontrol.Create не записываеться.


 
denmin   (2008-04-14 15:59) [4]

Спасибо большое tesseract ©

> MyСontrol:= TMyControl.Create(nil);

помогло...


 
tesseract ©   (2008-04-14 16:00) [5]


> помогло...


Разбивать объекты не забудь - утечка будет нехилая.


 
Anatoly Podgoretsky ©   (2008-04-14 16:32) [6]

> tesseract  (14.04.2008 15:51:02)  [2]

Ну вот продал секрет


 
Anatoly Podgoretsky ©   (2008-04-14 16:33) [7]

> denmin  (14.04.2008 15:59:04)  [4]

Это временно, глобальность ты так и не убрал.


 
tesseract ©   (2008-04-14 16:34) [8]


> Это временно, глобальность ты так и не убрал.


Да там он половину не убрал. Таймер не разрушиться, сам компонент тоже. Глобальность тут - наиментшее из всех зол ИМХО.


 
evvcom ©   (2008-04-14 16:38) [9]


> Anatoly Podgoretsky ©   (14.04.08 16:33) [7]

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


 
MsGuns ©   (2008-04-14 16:54) [10]

Чисто спортивный интерес - зачем для того, чтобы создать простой таймер, надо непременно вместе  с ним соорудить еще некий таинственный объект-"обертку" MyControl ?


 
Anatoly Podgoretsky ©   (2008-04-15 12:16) [11]

> tesseract  (14.04.2008 16:34:08)  [8]

Намекаешь - переписать все нафиг.


 
tesseract ©   (2008-04-15 13:54) [12]


> Намекаешь - переписать все нафиг.


Намекаю почитать что - нибудь :-)



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

Текущий архив: 2009.03.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
15-1232542679
Marser
2009-01-21 15:57
2009.03.29
Как насчёт KMP?


2-1233739538
zorik
2009-02-04 12:25
2009.03.29
Смена типа на ходу


2-1233922206
Barsuk
2009-02-06 15:10
2009.03.29
Обход перехвата WinAPI-функции


15-1232607529
XentaAbsenta
2009-01-22 09:58
2009.03.29
Получить уведомление о всовывании флешки.


2-1234270641
Alex_Ford
2009-02-10 15:57
2009.03.29
Ping - Программно