Firemonkey-如何在TComponent下放置新表单

时间:2018-12-07 16:14:22

标签: delphi firemonkey

我正在使用Delphi 10和Firemonkey开发适用于Windows / Apple的应用程序。 我的主要形式有一个TButton。 当我按TButton时,我想在TButton的正下方创建并定位Form1。 这是我的代码:

//Transposes the coordinates in the context of the form. 
myTPointF := TButton.LocalToAbsolute(TButton.Position.Point);

//Transposes the coordinates in the context of the screen. 
myTPointF := ClientToScreen(myTPointF);

Form1.Top := FloatToStr(myTPointF.X) + Round(TButton.Height);
Form1.Left := FloatToStr(myTPointF.Y);

如果TButton位于窗体(而不是屏幕)的Point(0,0)附近,则它可以工作,但是距离该点越远,则打开它时Form1错误的可能性就越大。

图像链接: https://ibb.co/85dfr9R https://ibb.co/t2stMHv

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您不应仅LocalToAbsolute()使用ClientToScreen(Button1.Position.Point)。您还可以在显示的代码中交换XY

您还最好将第二个表单设置为首先可见,因为在Fmx框架中首次显示它们之前,不一定要创建除主表单以外的其他表单。

这有效:

procedure TForm14.Button1Click(Sender: TObject);
var
  newpos: TPointF;
begin
  Form15.Visible := True;

  newpos := ClientToScreen(Button1.Position.Point);
  Form15.Left := Round(newpos.X);
  Form15.Top  := Round(newpos.Y+Button1.Height);
end;