Конференция "Основная" » Как обратится к компоненту созданному через TCustomControl [D7, Win95/98, WinME, NT4, WinXP]
 
  • denmin (14.04.08 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 © (14.04.08 15:50) [1]
    > denmin  (14.04.2008 15:47:00)  [0]

    Проблема в MyControl.глобальная переменная, ничем не защищена.
  • tesseract © (14.04.08 15:51) [2]

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


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


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


    MyСontrol:= TMyControl.Create(nil);
  • tesseract © (14.04.08 15:52) [3]

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


    В неё значение от TMycontrol.Create не записываеться.
  • denmin (14.04.08 15:59) [4]
    Спасибо большое tesseract ©

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

    помогло...
  • tesseract © (14.04.08 16:00) [5]

    > помогло...


    Разбивать объекты не забудь - утечка будет нехилая.
  • Anatoly Podgoretsky © (14.04.08 16:32) [6]
    > tesseract  (14.04.2008 15:51:02)  [2]

    Ну вот продал секрет
  • Anatoly Podgoretsky © (14.04.08 16:33) [7]
    > denmin  (14.04.2008 15:59:04)  [4]

    Это временно, глобальность ты так и не убрал.
  • tesseract © (14.04.08 16:34) [8]

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


    Да там он половину не убрал. Таймер не разрушиться, сам компонент тоже. Глобальность тут - наиментшее из всех зол ИМХО.
  • evvcom © (14.04.08 16:38) [9]

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

    Думаю, автор еще не догадывается, что экземпляров TForm1 можно создать более одного. До такой попытки ошибка не проявится, можно быть спокойным :)
  • MsGuns © (14.04.08 16:54) [10]
    Чисто спортивный интерес - зачем для того, чтобы создать простой таймер, надо непременно вместе  с ним соорудить еще некий таинственный объект-"обертку" MyControl ?
  • Anatoly Podgoretsky © (15.04.08 12:16) [11]
    > tesseract  (14.04.2008 16:34:08)  [8]

    Намекаешь - переписать все нафиг.
  • tesseract © (15.04.08 13:54) [12]

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


    Намекаю почитать что - нибудь :-)
 
Конференция "Основная" » Как обратится к компоненту созданному через TCustomControl [D7, Win95/98, WinME, NT4, WinXP]
Есть новые Нет новых   [134487   +1][b:0][p:0]