Главная страница
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.039 c
3-1216467013
Евгений Р.
2008-07-19 15:30
2009.03.29
Обновление в DbGrid


15-1233095106
паровоз
2009-01-28 01:25
2009.03.29
Применим ли инструмент View CPU для отладки сторонних ехе-шников


4-1179926136
cosinus
2007-05-23 17:15
2009.03.29
Добавление текста в чужое окно. Проблемы с RichView.


15-1232712297
Дополз
2009-01-23 15:04
2009.03.29
А может ли администрация сайта (любого) узнать...


1-1208194778
gear
2008-04-14 21:39
2009.03.29
Локализация "на лету"