对于一个 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:
如果我添加一个重新绘制Layout1
的FloatAnimation1.OnProcess
事件处理程序,它在启用MonoChromeEffect1
时也能工作。
procedure TForm1.FloatAnimation1Process(Sender: TObject);
begin
Layout1.Repaint;
end;
型
增编2:
如果我添加一个调用Layout1.UpdateEffects
的FloatAnimation1.OnProcess
事件处理程序,它在启用MonoChromeEffect1
时也能正常工作。
procedure TForm1.FloatAnimation1Process(Sender: TObject);
begin
Layout1.UpdateEffects;
end;
型
...
1条答案
按热度按时间bfrts1fy1#
使用动画。开始代替。恕我直言,没有必要的布局
字符串
的数据