Анимация событий мыши в Delphi Firemonkey - PullRequest
2 голосов
/ 18 октября 2011

Я добавил кнопку, добавил к ней BoxBlurEffect и установил следующие атрибуты для BoxBlurEffect1.

//extracted form fmx file 

object BoxBlurEffect1: TBoxBlurEffect
  Trigger = 'IsMouseOver=true'
  Enabled = False
  BlurAmount = 0.009999999776482582
  object FloatAnimation1: TFloatAnimation
    AnimationType = atInOut
    Enabled = True
    Duration = 1.000000000000000000
    Loop = True
    Trigger = 'IsMouseOver=true'
    TriggerInverse = 'IsMouseOver=false'
    StartValue = 0.009999999776482582
    StopValue = 10.000000000000000000
    PropertyName = 'BlurAmount'
  end
end

Я устанавливаю loop = true, потому что если оно ложно, оно не анимируется, а просто внезапно завершает работу.

Так что я установил это на true. Но теперь он зацикливается (как описано в названии), а не просто оживляет один раз и останавливается.

А также я хочу, чтобы он анимировал от стоп-значения до стартового значения, когда я оставляю мышь (только один раз). Когда моя мышь уходит или входит, новая анимация должна начинаться с текущего значения, а не с максимального или минимального значения.

1 Ответ

6 голосов
/ 18 октября 2011

Триггер не всегда работает, как я ожидаю, ни ...

Вы можете сделать это так:

procedure TForm2.Button1MouseEnter(Sender: TObject);
begin
  BoxBlurEffect1.AnimateFloat('BlurAmount', 10, 1);
end;

procedure TForm2.Button1MouseLeave(Sender: TObject);
begin
  BoxBlurEffect1.AnimateFloat('BlurAmount', 0, 1);
end;

Без анимации TFloat:

  object Button1: TButton
    Position.Point = '(264,192)'
    Width = 80.000000000000000000
    Height = 22.000000000000000000
    OnMouseEnter = Button1MouseEnter
    OnMouseLeave = Button1MouseLeave
    TabOrder = 1
    StaysPressed = False
    IsPressed = False
    Text = 'Button1'
    object BoxBlurEffect1: TBoxBlurEffect
      BlurAmount = 0.009999999776482582
    end
  end
...