掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
アニメーション設定をコードで記述する際の書き方 (ID:151133)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
これ以外の方法ではありませんが、 そこは、OnMouseMoveイベントではなく、OnMouseEnterイベントに記述した方が良いと思います。 ・OnMouseMoveイベントに記述した場合、コンポーネント上でマウスを移動させる度に、毎回イベントが走ってしまいます。 ・OnMouseEnterイベントに記述した場合、コンポーネント上にマウスが乗った時、1度だけイベントが走ります。 Moeさんのコードでサンプルを作成してみました。 「FMXコード」 unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects, FMX.Ani; type TForm1 = class(TForm) Rectangle1: TRectangle; Rectangle2: TRectangle; Rectangle3: TRectangle; procedure FormCreate(Sender: TObject); procedure RectangleMouseEnter(Sender: TObject); procedure RectangleMouseLeave(Sender: TObject); private { private 宣言 } public { public 宣言 } end; var Form1: TForm1; implementation {$R *.fmx} const LENGTH_DEF = 50; // 通常の大きさ LENGTH_MAX = 70; // 引き延ばした大きさ procedure TForm1.FormCreate(Sender: TObject); begin // ここはオブジェクトインスペクタで設定しても良い Rectangle1.OnMouseEnter := RectangleMouseEnter; Rectangle1.OnMouseLeave := RectangleMouseLeave; Rectangle2.OnMouseEnter := RectangleMouseEnter; Rectangle2.OnMouseLeave := RectangleMouseLeave; Rectangle3.OnMouseEnter := RectangleMouseEnter; Rectangle3.OnMouseLeave := RectangleMouseLeave; end; procedure TForm1.RectangleMouseEnter(Sender: TObject); begin TAnimator.AnimateFloat(TRectangle(Sender), 'Width', LENGTH_MAX, 0.1, TAnimationType.In, TInterpolationType.Linear); end; procedure TForm1.RectangleMouseLeave(Sender: TObject); begin TAnimator.AnimateFloat(TRectangle(Sender), 'Width', LENGTH_DEF, 0.1, TAnimationType.In, TInterpolationType.Linear); end; end. アニメーションを終了させる値に、TRectangle(Sender).Width + 20 等と行わず、定数値で指定している理由は、 素早くマウスを動かすと、TRectangle の幅が徐々に変わって行ってしまうからです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.