我正在使用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
预先感谢您的帮助。
答案 0 :(得分:0)
您不应仅LocalToAbsolute()
使用ClientToScreen(Button1.Position.Point)
。您还可以在显示的代码中交换X
和Y
。
您还最好将第二个表单设置为首先可见,因为在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;