Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обратится к компоненту созданному через 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.глобальная переменная, ничем не защищена.


Наверх

Титульная страница Поиск, карта сайта Написать письмо