Конференция "Компоненты" » движение объекта Tobj в таймере [D6, WinXP]
 
  • novai (30.10.08 04:32) [0]
    Всем привет! Есть код:
    ...
    type
     TObj = class (TGraphicControl)
     private
      timer:TTimer;
      procedure OnTimer(Sender: TObject);  
     protected
       procedure Paint; override;
     public
       constructor Create(Owner: TComponent); override;
       destructor Destroy; override;
     end;
    ...
    procedure TObj.OnTimer(Sender: TObject);
    begin
       inc((Sender as TObj).Top);

    //   if (Sender as TObj).Top+(Sender as TObj).Height>form1.Height then
    //     (Sender as TObj).Destroy;

    end;

    procedure Tobj.Paint;
    //var Rect: TRect;
    begin
    with Canvas do
    begin
      Brush.Color := clYellow;
      Brush.Style := bsSolid;
      FillRect(ClientRect);
    //   rectangle(ClientRect);
    end;
    end;

    constructor TObj.Create(Owner: TComponent);
    begin
     inherited Create(Owner);

     timer:=TTimer.Create(Owner);
     timer.Interval:=200;
     timer.OnTimer:=OnTimer;
     timer.Enabled:=true;

    end;

    destructor TObj.Destroy;
    begin

     inherited Destroy;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
         with TObj.Create (self) do
         begin
           Top     := 0;
           Left    := 100;
           Width   := 80;
           Height  := 40;
           Parent  := Self;
         end;
    end;

    как в ontimer правильно перемещать мой объект вниз, и как только он достигнет низа формы самого себя уничнтожить?
    Подскажите, кто знает...
  • Сергей М. © (30.10.08 08:22) [1]

    > самого себя уничнтожить


    Самого себя нельзя.
    В обработчике таймера при достижении условия, требующего уничтожение, следует асинхронно (PostMessage) послать любое предопределенное сообщение, например, окну формы. В обработчике этого сообщения уничтожение будет безопасным.
  • novai (30.10.08 08:23) [2]

    > Сергей М. ©   (30.10.08 08:22) [1]

    а как передвинуть top себя из таймера?
  • DimaBr © (30.10.08 08:33) [3]
    procedure TObj.OnTimer(Sender: TObject);
    begin
      Top := Top + 1;
    ....
    end;

  • novai (30.10.08 09:08) [4]
    всем спасибо!
 
Конференция "Компоненты" » движение объекта Tobj в таймере [D6, WinXP]
Есть новые Нет новых   [134464   +62][b:0][p:0.001]