对于 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;
...
使用Animation.Start代替
procedure TForm1.Button2Click(Sender: TObject);
begin
FloatAnimation1.Start:=true;
end;