delphi TFloatAnimation淡出不与TMonochromeEffect一起工作的图片

insrf1ej  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(160)

对于一个 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),它显示了这个问题:
x1c 0d1x的数据

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/柏林/en/Using_FireMonkey_Image_Effects#Applying_Multiple_Effects_to_a_Picture中所建议)
MonoChromeEffect1被禁用时,淡出工作。当MonoChromeEffect1被启用时,淡出不工作。
有什么建议可能是什么问题?

增编1:

如果我添加一个重新绘制Layout1FloatAnimation1.OnProcess事件处理程序,它在启用MonoChromeEffect1时也能工作。

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

增编2:

如果我添加一个调用Layout1.UpdateEffectsFloatAnimation1.OnProcess事件处理程序,它在启用MonoChromeEffect1时也能正常工作。

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


...

bfrts1fy

bfrts1fy1#

使用动画。开始代替。恕我直言,没有必要的布局

procedure TForm1.Button2Click(Sender: TObject);
begin
  FloatAnimation1.Start:=true;
end;

字符串


的数据

相关问题