Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.02 c
15-1232814370
saNat
2009-01-24 19:26
2009.03.29
Не работает политика разрешения установки программ пользователям


2-1233305201
mobwar
2009-01-30 11:46
2009.03.29
Замена двух, трёх символов на один


2-1233595304
Flex
2009-02-02 20:21
2009.03.29
события OnUPDRead Компонента ТIdUDPServer1


2-1233646031
pavel_guzhanov
2009-02-03 10:27
2009.03.29
Странно передается параметр в запрос


2-1234184735
Footballer
2009-02-09 16:05
2009.03.29
Записать текстовый файл в exe-файл




   Наверх