这很容易做到。在下面的代码中,我创建了两个表单,每个表单都将透明度设置为 True。
每个都有一个由客户端对齐的 TLayout。
每个 TLayout 都有一个 TImageControl。我选择 TImageControl 只是因为它有一个 LoadFromFile 方法,可以让这个演示变得简单。您可以改用不同的图像控件。 (TImageControl 确实有一个您可能不想看到的边框。)
TLayouts 的原因是因为我想要一个用于演示的 OnClick 处理程序,但是单击 TImageControl 会打开一个打开文件对话框。所以我不得不在 TImageControl 上将 HitTest 设置为 False,并让 TLayouts 来处理鼠标点击。使用不同的图像控件,您应该可以不用 TLayouts。
第一个表单有一个 TFloatAnimation 链接到 TLayout 的 Opacity 属性。 TFloatAnimation 的 OnProgress 事件会更新另一个窗体上 TLayout 的不透明度。
单击表单触发淡出/淡入。双击关闭应用程序。 (需要有一些方法来关闭它,因为透明表单没有正常的关闭按钮。)
Form1 .fmx:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form6'
ClientHeight = 480
ClientWidth = 680
Transparency = True
Visible = True
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
OnCreate = FormCreate
DesignerMasterStyle = 0
object Layout1: TLayout
Align = Client
HitTest = True
Size.Width = 680.000000000000000000
Size.Height = 480.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
OnClick = Layout1Click
OnDblClick = Layout1DblClick
object ImageControl1: TImageControl
Align = Client
HitTest = False
Size.Width = 680.000000000000000000
Size.Height = 480.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
end
object FloatAnimation1: TFloatAnimation
Duration = 2.000000000000000000
OnProcess = FloatAnimation1Process
OnFinish = FloatAnimation1Finish
PropertyName = 'Opacity'
StartValue = 1.000000000000000000
StopValue = 0.000000000000000000
end
end
end
Form2 .fmx
object Form2: TForm2
Left = 0
Top = 0
Caption = 'Form7'
ClientHeight = 480
ClientWidth = 680
Transparency = True
Visible = True
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
OnCreate = FormCreate
DesignerMasterStyle = 0
object Layout1: TLayout
Align = Client
HitTest = True
Opacity = 0.000000000000000000
Size.Width = 680.000000000000000000
Size.Height = 480.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
OnClick = Layoutl1Click
OnDblClick = Layout1DblClick
object ImageControl1: TImageControl
Align = Client
HitTest = False
Size.Width = 680.000000000000000000
Size.Height = 480.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
end
end
end
Form1 代码:
unit MainForm;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Effects,
FMX.Filter.Effects, FMX.StdCtrls, FMX.Ani, FMX.Layouts;
type
TForm1 = class(TForm)
ImageControl1: TImageControl;
FloatAnimation1: TFloatAnimation;
Layout1: TLayout;
procedure Layout1Click(Sender: TObject);
procedure FloatAnimation1Process(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Layout1DblClick(Sender: TObject);
procedure FloatAnimation1Finish(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
uses FormTwo;
procedure TForm1.FloatAnimation1Finish(Sender: TObject);
begin
FloatAnimation1.Inverse:=not FloatAnimation1.Inverse;
end;
procedure TForm1.FloatAnimation1Process(Sender: TObject);
begin
if Assigned(Form2) then Form2.Layout1.Opacity:=1-Layout1.Opacity;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ImageControl1.LoadFromFile({your image path here});
end;
procedure TForm1.Layout1Click(Sender: TObject);
begin
FloatAnimation1.Start;
end;
procedure TForm1.Layout1DblClick(Sender: TObject);
begin
Application.Terminate;
end;
end.
Form2代码:
unit FormTwo;
interface
uses
MainForm,
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Layouts;
type
TForm2 = class(TForm)
ImageControl1: TImageControl;
Layout1: TLayout;
procedure FormCreate(Sender: TObject);
procedure Layoutl1Click(Sender: TObject);
procedure Layout1DblClick(Sender: TObject);
end;
var
Form2: TForm2;
implementation
{$R *.fmx}
procedure TForm2.FormCreate(Sender: TObject);
begin
Top:=Form1.Top;
Left:=Form1.Left;
IMageControl1.LoadFromFile({your image path here});
end;
procedure TForm2.Layoutl1Click(Sender: TObject);
begin
Form1.FloatAnimation1.Start;
end;
procedure TForm2.Layout1DblClick(Sender: TObject);
begin
Application.Terminate;
end;
end.