请问,用timer事件,怎么制造一个label控件围绕一个圈转动.如该label的内容围绕一个image 如一个圆转动.请问这样的代码该怎么写.

解决方案 »

  1.   

    function Encircle( // 计算围绕原点运动的坐标
      mOrigin: TPoint; // 原点坐标
      mSpeed: Real; // 运动速度 // 每次多少角度
      mRadii: Integer; // 半径
      var nAngle: Real; // [in,out]返回移动后的角度
      var nPoint: TPoint // 返回移动后的坐标
    ): Boolean;
    begin
      Result := False;
      if mSpeed = 0 then Exit;
      nAngle := nAngle + mSpeed;
      if nAngle > 2 * Pi then
        nAngle := nAngle - 2 * Pi
      else if nAngle < 0 then
        nAngle := nAngle + 2 * Pi;
      nPoint.X := Round(Cos(nAngle) * mRadii) + mOrigin.X;
      nPoint.Y := Round(Sin(nAngle) * mRadii) + mOrigin.Y ;
      Result := True;
    end; { Encircle }procedure TForm1.Timer1Timer(Sender: TObject);
    {$J+}const vAngle: Real = 0;{$J-} // 可以用字段代替
    const
      cOrigin: TPoint = (X: 300; Y: 300);
      cSpeed = 0.1;
      cRadii = 100;
    var
      vPoint: TPoint;
    begin
      Encircle(cOrigin, cSpeed, cRadii, vAngle, vPoint);
      Label1.Left := vPoint.X - Label1.Width div 2;
      Label1.Top := vPoint.Y - Label1.Height div 2;
    end;