unit untFireworks; interface uses System.Types, System.UITypes, System.Classes, System.UIConsts, FMX.Filter.Effects, FMX.Controls, FMX.Effects, FMX.Ani, FMX.Types, FMX.Objects; type TFireWorksStatus = record private public StartX: Single; FireY: Single; FireRadius: Single; FireColorHue: Single; // -1 から 1 までの値を取る LauncherDelay: Single; LauncherDuration: Single; FireDuration: Single; BallRadius: Single; BallCount: Integer; BallBitmap: TBitmap; LauncherWidth: Single; LauncherHeight: Single; end; type TFireworks = class private FTimer: TTimer; FParentImage: TImage; FOwner: TComponent; FStatus: TFireWorksStatus; FLauncher: TRectangle; FLauncherPositionYAnimation: TFloatAnimation; FLauncherBlur: TBlurEffect; FBall: Array of TCircle; FBallImage: Array of TImage; FBallPositionAnimation: Array of TPathAnimation; FBallOpacityAnimation: Array of TFloatAnimation; FBallHueAdjustEffect: Array of THueAdjustEffect; procedure OnTimer(Sender: TObject); procedure OnFLauncherPositionYAnimationFinish(Sender: TObject); procedure OnBallOpacityAnimationFinish(Sender: TObject); function getScreenHeight: Single; function getScreenWidth: Single; property ScreenWidth: Single read getScreenWidth; property ScreenHeight: Single read getScreenHeight; public constructor Create(aOwner: TComponent; aParent: TImage; aFireWorksStatus: TFireWorksStatus); destructor Destroy(); override; procedure Fire(); end; const START_POSITION_V_MARGIN = 0.1; START_POSITION_H_MARGIN = 0.1; FINISH_POSITION_V_MARGIN = 0.1; implementation { TFireworks } constructor TFireworks.Create(aOwner: TComponent; aParent: TImage; aFireWorksStatus: TFireWorksStatus); var i: Integer; tmpRad: Single; begin FTimer := TTimer.Create(nil); FTimer.OnTimer := OnTimer; FTimer.Enabled := False; FOwner := aOwner; FParentImage := aParent; FParentImage.ClipChildren := True; FStatus := aFireWorksStatus; // FTimer.Interval := Round(FStatus.LauncherDelay * 1000); FTimer.Enabled := False; // FLauncher := TRectangle.Create(FOwner); FLauncher.Parent := FParentImage; FLauncher.Visible := False; FLauncherBlur := TBlurEffect.Create(FOwner); FLauncherBlur.Parent := FLauncher; FLauncherBlur.Softness := 0.1; with FStatus do begin FLauncherPositionYAnimation := TFloatAnimation.Create(FOwner); FLauncherPositionYAnimation.Parent := FLauncher; FLauncherPositionYAnimation.PropertyName := 'Position.Y'; FLauncherPositionYAnimation.OnFinish := OnFLauncherPositionYAnimationFinish; FLauncher.Width := LauncherWidth; FLauncher.Height := LauncherHeight; FLauncher.Position.X := StartX - LauncherWidth / 2; FLauncher.Position.Y := Self.ScreenHeight * 0.95 - LauncherHeight / 2; FLauncherPositionYAnimation.StartValue := FLauncher.Position.Y; FLauncherPositionYAnimation.StopValue := FireY - LauncherHeight / 2; FLauncherPositionYAnimation.Duration := LauncherDuration; FLauncherPositionYAnimation.AnimationType := TAnimationType.atOut; FLauncherPositionYAnimation.Interpolation := TInterpolationType.itCubic; end; // SetLength(FBall, FStatus.BallCount); SetLength(FBallPositionAnimation, FStatus.BallCount); SetLength(FBallOpacityAnimation, FStatus.BallCount); SetLength(FBallImage, FStatus.BallCount); SetLength(FBallHueAdjustEffect, FStatus.BallCount); for i := 0 to FStatus.BallCount - 1 do begin FBallImage[i] := TImage.Create(FOwner); FBallImage[i].Parent := FParentImage; FBallImage[i].Bitmap.Assign(FStatus.BallBitmap); FBallImage[i].Width := FStatus.BallRadius * 2; FBallImage[i].Height := FStatus.BallRadius * 2; FBallImage[i].Position.X := FStatus.StartX - FStatus.BallRadius; FBallImage[i].Position.Y := FStatus.FireY - FStatus.BallRadius; FBallImage[i].RotationAngle := (360 / FStatus.BallCount) * i + 90; FBallImage[i].Visible := False; // FBallPositionAnimation[i] := TPathAnimation.Create(FOwner); FBallPositionAnimation[i].Parent := FBallImage[i]; FBallPositionAnimation[i].Duration := FStatus.FireDuration * 0.8; FBallPositionAnimation[i].AnimationType := TAnimationType.atOut; FBallPositionAnimation[i].Interpolation := TInterpolationType.itCubic; FBallPositionAnimation[i].Path.Clear; FBallPositionAnimation[i].Path.MoveTo(PointF(0, 0)); tmpRad := (2 * PI / FStatus.BallCount) * i; FBallPositionAnimation[i].Path.LineTo(PointF(Cos(tmpRad) * FStatus.FireRadius, Sin(tmpRad) * FStatus.FireRadius)); // FBallOpacityAnimation[i] :=TFloatAnimation.Create(FOwner); FBallOpacityAnimation[i].Parent := FBallImage[i]; FBallOpacityAnimation[i].PropertyName := 'Opacity'; FBallOpacityAnimation[i].Duration := FStatus.FireDuration; FBallOpacityAnimation[i].StartValue := 1; FBallOpacityAnimation[i].StopValue := 0.1; FBallOpacityAnimation[i].AnimationType := TAnimationType.atIn; FBallOpacityAnimation[i].Interpolation := TInterpolationType.itCubic; // FBallHueAdjustEffect[i] := THueAdjustEffect.Create(FOwner); FBallHueAdjustEffect[i].Parent := FBallImage[i]; FBallHueAdjustEffect[i].Hue := FStatus.FireColorHue; end; // 代表として Index 0 を基準にする FBallOpacityAnimation[0].OnFinish := OnBallOpacityAnimationFinish; end; destructor TFireworks.Destroy; begin FTimer.Free; inherited; end; function TFireworks.getScreenHeight: Single; begin Result := FParentImage.Height; end; function TFireworks.getScreenWidth: Single; begin Result := FParentImage.Width; end; procedure TFireworks.OnBallOpacityAnimationFinish(Sender: TObject); var i: Integer; begin for i := 0 to FStatus.BallCount - 1 do begin FBallImage[i].Visible := False; end; self.Free; end; procedure TFireworks.OnFLauncherPositionYAnimationFinish(Sender: TObject); var i: Integer; begin FLauncher.Visible := False; for i := 0 to FStatus.BallCount - 1 do begin FBallImage[i].Visible := True; FBallPositionAnimation[i].Start(); FBallOpacityAnimation[i].Start(); end; end; procedure TFireworks.OnTimer(Sender: TObject); begin FLauncher.Visible := True; FLauncherPositionYAnimation.Start(); FTimer.Enabled := False; end; procedure TFireworks.Fire; begin // Start FTimer.Enabled := True; end; end.
月別アーカイブ: 2014年4月
TIniFile を使って色の保存
tmpStr := tmpIni.ReadString('design', 'DesignFontColor', IntToStr(DEFAULT_DesignFontColor)); Self.DesignFontColor := StringToAlphaColor(tmpStr); tmpStr := AlphaColorToString(Self.DesignFontColor); tmpIni.WriteString ('design', 'DesignFontColor', tmpStr);
Unable to locate DeviceSupport directory matched with connected device info
‘Unable to locate DeviceSupport directory matched with connected device info’(接続したデバイスの情報に一致する DeviceSupport ディレクトリが見つかりません)
デバイスの iOS バージョンを最近アップグレードした場合は、iOS デバイスでアプリケーションを実行しようとしたときに上記のエラー メッセージが出力される可能性があります。このメッセージが表示されたら、以下の手順を実行してください。
メッセージを閉じます。
Mac で Xcode を開きます。
[ウインドウ|オーガナイザ]を選択し、お使いのデバイスが Xcode で認識されるかどうかを判断して、以下を行います。
デバイスが Xcode で認識される場合は、Xcode にデバイスのサポート情報をインポートし直し、RAD Studio からアプリケーションを再度実行してみます。
デバイスが Xcode で認識されない場合は、Xcode をアップグレードする必要があります。
メモ: あるいは、デバイスが Xcode で認識されないが、お使いの Mac の Xcode をアップグレードしたくないという場合には、お使いのデバイスを認識するアップグレード版の Xcode がインストールされている別の Mac にデバイスを接続してみることもできます。お使いのデバイスのサポート情報を新しいバージョンの Xcode で再度インポートしたら、古いバージョンの Xcode で、アップグレードした iOS デバイスも認識されるようになる可能性があります。
エラーメッセージ: Unable to install package
e8008016 は???
e8000018: 証明書の有効期限が切れています。新しいバージョンの証明書をダウンロードします。
e800001c: iOS シミュレータが Mac 上で動作している場合は、シミュレータを終了し、アプリケーションを iOS デバイス上でもう一度実行してみます。
e800002d: お使いの iOS デバイスを再起動します。詳細については、Apple サポート コミュニティの関連スレッドを参照してください。
e800007e: お使いの iOS デバイスのバージョンが、デフォルトの最小バージョンを下回っています。[プロジェクト|オプション…|Delphi コンパイラ|リンク]を選択し、[サポートされている iOS の最小バージョン]をお使いの iOS デバイスのバージョンに変更します。たとえば、5.0 などに変更します (それでもうまくいかない場合は、新しい iOS デバイスを入手しなければならない可能性があります)。
e8000080: プロジェクトに定義されている iOS フォーム ファクタ(UIDeviceFamily)に一致しない iOS デバイスで iOS アプリケーションを実行しようとしています。たとえば、iOS アプリケーションが iPhone でのみ動作するように構成されているにもかかわらず、そのアプリケーションを iPad で実行しようとしている場合などです。[プロジェクト|オプション…|バージョン情報]を選択し、お使いの iOS デバイスに一致する UIDeviceFamily キー値を選びます。たとえば、アプリケーションを任意の iOS デバイスで実行する場合は、[iPhone および iPad]を選択します。
e8008015:RAD Studio で構成したプロビジョニング プロファイルがターゲット iOS デバイスに準備されていません。構成済みのプロビジョニング プロファイルをターゲット デバイスに準備するか、RAD Studio のプロジェクト構成を別のプロビジョニング プロファイルに変更します。「[プロビジョニング]ページに必要な情報をすべて入力する」を参照してください。RAD Studio 内のプロビジョニング データが、Mac デベロッパ アカウントではなく iOS デベロッパ アカウントに必ず一致するようにします。iOS デベロッパ証明書名を指定する際は、特に注意してください。
e8008018: 証明書の有効期限が切れています。新しいバージョンの証明書をダウンロードします。
ListBox.Clear でエラー
iOS シミュレータの ListBox.Clear でエラー
frmMain.lbxCardList.BeginUpdate; while frmMain.lbxCardList.Items.Count <> 0 do frmMain.lbxCardList.Items.Delete(frmMain.lbxCardList.Items.Count - 1); frmMain.lbxCardList.EndUpdate;
で対応