delphi - 自定义绘制FMX控件位置错误

标签 delphi firemonkey

我最近开始将应用程序转换为FireMonkey,并从简单的控件开始。由于某种原因,与诸如TPanel或TButton之类的表单上放置的组件相比,它们的位置不正确。从我的测试来看,位置似乎翻了一番。

我的测试项目很简单:(在Delphi XE5中)


创建一个新的firemonkey HD应用程序
在位置(100,100)的窗体上放置一个面板,右键单击它,然后“发送回”
为自定义组件粘贴以下代码(在需要时使用适配器名称)


码:

type
  TTest = class(TPaintBox)
  private
    FBitmap: TBitmap;
  public
    Constructor Create(AOwner:TComponent); override;
    Destructor Destroy; override;
    procedure Paint; override;
  end;

{ TTest }

constructor TTest.Create(AOwner: TComponent);
begin
  inherited;
  FBitmap := TBitmap.Create;
  FBitmap.LoadFromFile('c:\test.png');
  Width := FBitmap.Width;
  Height := FBitmap.Height;
end;

destructor TTest.Destroy;
begin
  FreeAndNil(FBitmap);
  inherited;
end;

procedure TTest.Paint;
begin
  Canvas.DrawBitmap(FBitmap,
     TRectf.Create(0, 0, FBitmap.Width, FBitmap.Height),
     AbsoluteRect,
     1);
end;



粘贴以下代码以动态创建上述组件


码:

procedure TForm2.FormCreate(Sender: TObject);
var t: TTest;
begin
  t := TTest.Create(self);
  t.Parent := self;
  t.Position.X := 50;
  t.Position.Y := 50;
end;


为Win32构建它。

在我的末端,图像显示在面板的左上角,它位于100,100,但控件显然已设置为将自身定位为50,50

调试显示正确的位置和矩形值。

我不知道发生了什么事。也许有人有一些建议/解释。

谢谢。

最佳答案

AbsoluteRect相对于控件的Form的矩形。如果要绘制某些内容,则必须使用局部坐标,在这种情况下为LocalRect

Canvas.DrawBitmap(FBitmap, TRectf.Create(0, 0, FBitmap.Width, FBitmap.Height), LocalRect, 1);

关于delphi - 自定义绘制FMX控件位置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26516822/

相关文章:

macos - Delphi Berlin 10.1 创建文件/文件夹 OS X

delphi - Firemonkey ScrollBox 错误

delphi - 如何更改TWebBrowser中的字体?

delphi - 设置第二个 TFDPhysFBDriverLink - 可能且必要吗?

delphi - 非重叠串行端口卡在 CloseHandle 处

delphi - 如何获取Firemonkey XE3中的屏幕分辨率?

delphi - 使用 TCameraComponent

windows - 如何使用 Delphi 7 检索 Windows 中所有磁盘的磁盘签名?

delphi - 分配时出现 JPEG 错误 #42

Delphi XE4 : target linux desktop?(图形用户界面应用程序)