TFloatAnimation 淡出无法与 TMonochromeEffect 一起使用的图片

问题描述 投票:0回答:1

对于 Delphi 10.2 Firemonkey Windows 应用程序,我想对图片应用

TMonochromeEffect
和多种其他效果。我使用
TLayout
容器,如下所述:https://docwiki.embarcadero.com/RADStudio/Berlin/en/Using_FireMonkey_Image_Effects#Applying_Multiple_Effects_to_a_Picture

同时我想用

TFloatAnmination
淡出图片。

如果启用

TMonochromeEffect
,淡出动画将不起作用。

这是一个小示例应用程序(仅使用一个

TMonochromeEffect
),它显示了问题:

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.Controls.Presentation, FMX.StdCtrls, FMX.Objects, FMX.Ani, FMX.Effects,
  FMX.Filter.Effects, FMX.Layouts;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Button2: TButton;
    FloatAnimation1: TFloatAnimation;
    MonochromeEffect1: TMonochromeEffect;
    Layout1: TLayout;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}


procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Bitmap.LoadFromFile('D:\MyPicture.jpg');
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  FloatAnimation1.Enabled:=false;
  FloatAnimation1.StopValue:=0;
  FloatAnimation1.Enabled:=true;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  //MonochromeEffect1.Enabled:=false; //works fine
  MonochromeEffect1.Enabled:=true; //not working
end;

end.

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 480
  ClientWidth = 640
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [Desktop]
  OnCreate = FormCreate
  DesignerMasterStyle = 0
  object Layout1: TLayout
    Align = Client
    Size.Width = 640.000000000000000000
    Size.Height = 480.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 0
    object Image1: TImage
      MultiResBitmap = <
        item
        end>
      Align = Client
      Size.Width = 640.000000000000000000
      Size.Height = 480.000000000000000000
      Size.PlatformDefault = False
      object FloatAnimation1: TFloatAnimation
        Duration = 2.000000000000000000
        PropertyName = 'Opacity'
        StartValue = 0.000000000000000000
        StartFromCurrent = True
        StopValue = 0.000000000000000000
      end
    end
    object MonochromeEffect1: TMonochromeEffect
      Enabled = False
    end
  end
  object Panel1: TPanel
    Position.X = 12.000000000000000000
    Position.Y = 12.000000000000000000
    Size.Width = 120.000000000000000000
    Size.Height = 69.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 1
    object Button1: TButton
      Position.X = 20.000000000000000000
      Position.Y = 8.000000000000000000
      TabOrder = 0
      Text = 'load image'
      OnClick = Button1Click
    end
    object Button2: TButton
      Position.X = 20.000000000000000000
      Position.Y = 32.000000000000000000
      TabOrder = 1
      Text = 'fade out'
      OnClick = Button2Click
    end
  end
end

单击

Button1
加载图片。

单击

Button2
淡出图片。

FloatAnimation1
作用于
Image1
的不透明度。

MonoChromeEffect1
应用于
Layout1
(如https://docwiki.embarcadero.com/RADStudio/Berlin/en/Using_FireMonkey_Image_Effects#Applying_Multiple_Effects_to_a_Picture中的建议)

MonoChromeEffect1

 禁用时,
淡出功能起作用。当
MonoChromeEffect1
启用时不起作用。

有什么建议可能是什么问题吗?

附录1:

如果我添加一个重新绘制

FloatAnimation1.OnProcess
Layout1
事件处理程序,当启用
MonoChromeEffect1
时它也可以工作。

procedure TForm1.FloatAnimation1Process(Sender: TObject);
begin
  Layout1.Repaint;
end;

附录2:

如果我添加一个调用

FloatAnimation1.OnProcess
Layout1.UpdateEffects
事件处理程序,当启用
MonoChromeEffect1
时它也可以工作。

procedure TForm1.FloatAnimation1Process(Sender: TObject);
begin
  Layout1.UpdateEffects;
end;

...

delphi firemonkey
1个回答
0
投票

使用Animation.Start代替

procedure TForm1.Button2Click(Sender: TObject);
begin
  FloatAnimation1.Start:=true;
end;
© www.soinside.com 2019 - 2024. All rights reserved.