Delphi 在Firemonkey组件中旋转时如何避免重复图像? 我做了什么?
我正试图开发一个FMX仪表组件。目前它只有一根针。我创建了一个新包,并添加了以下代码: 单位FMX.VDODelphi 在Firemonkey组件中旋转时如何避免重复图像? 我做了什么?,delphi,components,firemonkey,Delphi,Components,Firemonkey,我正试图开发一个FMX仪表组件。目前它只有一根针。我创建了一个新包,并添加了以下代码: 单位FMX.VDO interface uses System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.MultiResBitmap, FMX.Layouts, FMX.Objects; type TVdoLayout = class(TScaledLayout)
interface
uses
System.SysUtils,
System.Classes,
FMX.Types,
FMX.Controls,
FMX.MultiResBitmap,
FMX.Layouts,
FMX.Objects;
type
TVdoLayout = class(TScaledLayout)
private
FNeedle : TImage;
function GetBitMapNeedle: TFixedMultiResBitmap;
procedure SetBitMapNeedle(const Value: TFixedMultiResBitmap);
function GetValue: Double;
procedure SetValue(const Value: Double);
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
property BitMapNeedle : TFixedMultiResBitmap read GetBitMapNeedle write SetBitMapNeedle;
property Value : Double read GetValue write SetValue;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TVdoLayout]);
end;
{ TVdoLayout }
constructor TVdoLayout.Create(AOwner: TComponent);
begin
inherited;
Self.Size.Width := 326;
Self.Size.Height := Self.Size.Width;
FNeedle := TImage.Create(Self);
FNeedle.Parent := Self;
FNeedle.Width := 262;
FNeedle.Height := 21;
FNeedle.Position.X := 40;
FNeedle.Position.Y := 270;
FNeedle.Height := Self.Height * 0.04901;
FNeedle.Width := Self.Width * 0.7485;
FNeedle.RotationCenter.X := 0.935;
FNeedle.RotationCenter.Y := 0.27;
FNeedle.RotationAngle := 45;
end;
function TVdoLayout.GetBitMapNeedle: TFixedMultiResBitmap;
begin
Result := FNeedle.MultiResBitmap;
end;
procedure TVdoLayout.SetBitMapNeedle(const Value: TFixedMultiResBitmap);
begin
FNeedle.MultiResBitmap := Value;
end;
function TVdoLayout.GetValue: Double;
begin
Result := FNeedle.RotationAngle;
end;
procedure TVdoLayout.SetValue(const Value: Double);
begin
FNeedle.RotationAngle := Value;
end;
end.
在此之后,我构建了项目并安装了我的组件
我已经创建了一个新的FMX项目,并将我的组件。我在设计时加载一个针的图片。见下文:
在设计时,我可以更改属性值
。如果您看到上面的代码,值
会改变打捆针的旋转角度。它在设计时工作得非常完美
有什么问题吗?
在运行时,当我通过TEdit将组件的值
属性更改为90时,它会工作,但会拍摄初始指针的快照,它看起来是重复的,如下所示:
其他我尝试过但没有成功的事情?
我尝试调用resize和repaint函数。
还添加了FNeedle.SetSubComponent(True)代码>按照@uwerabe建议的方式创建。
如果我在运行时加载指针图像,它就会工作。但这不是一个理想的解决方案
细节
- 德尔福10.1柏林
- FireMonkey(在Windows上)
在我的搜索中,我在这里找到了解决方案:
我只需将存储的属性设置为False
。见下文:
FNeedle.Stored := false;
您可能被流媒体系统欺骗了。在创建过程中添加FNeedle.SetSubComponent(True)是否有效?@uwerabe否,它不起作用。在这种情况下,请提供一个显示错误的最小项目。@uwerabe,我重新表述了我的问题。我认为现在更容易复制。当您使用SetSubComponent进行测试时,您是重新创建了DFM还是使用现有的DFM进行了测试?