Delphi FMX如何用鼠标调整无边框窗体的大小

5
有没有办法在Delphi FMX中使用鼠标调整无边框窗体的大小?我尝试了 OnMouseDown 和 OnMouseMove 事件,并比较了窗体相对于左侧和顶部的位置,但我无法使其正常工作。由于某种原因,在FMX中的鼠标与普通VCL应用程序中的鼠标似乎非常不同。

1
添加一个状态栏,将其 ShowSizeGrip 设置为 True,然后你就完成了 :) - TLama
1
太好了,如果它能正常工作 - 你救了我的一天 :) - user3337132
@TLama:请回答一下,这样我们才能投票? - whosrdaddy
@whosrdaddy,抱歉,我一直忙于一些字体方面的事情... 嗯,看看这个用户的其他问题,我不认为这是一个好建议。 OP似乎想要删除表单边框,然后将其功能放回到不同的控件上。 我不知道原因,但是否有办法重新设计边框呢?(如果设计是问题的话) - TLama
谢谢您的评论。我需要为一个不想要边框的客户制作一个笔记应用程序。我还没有测试这种方法。但是,我可以将状态栏设置为与应用程序相同的颜色,这样用户就看不到它了 - 这是最好的选择。 - user3337132
显示剩余2条评论
2个回答

0
在Firemonkey中,鼠标的坐标不是相对于窗体左上角像素的任何时间点。
您可以使用函数将它们转换并使用以下代码模拟大小调整:
procedure TFenetre.btnRedimensionneMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
  if (ssLeft in Shift) then
  begin
    deplacementX := X;
    deplacementY := Y;
  end;
end;

procedure TFenetre.btnRedimensionneMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Single);
begin
  if (ssLeft in Shift) then
  begin
    Self.width := Self.width - deplacementX + X;
    Self.height := Self.height - deplacementY + Y;
  end;
end;

btnRedimensionne是一个按钮、图像或其他用作大小控制的手柄。

将以下内容添加到您的类中:

deplacementX, deplacementY: Single;

这些字段用于计算运动(增加或减小表单/框架的大小)。


0

如果您的客户没有禁止,您可以在运行时更改BorderStyle,以使用户能够像通常一样调整窗体大小。这不会对调整大小造成问题,而且当用户不使用此功能时,将没有边框。用户可以通过按CTRL + R来激活此功能,或者您可以制作一个按钮或选项来激活它。

在我的情况下,这很好用,因为我只需保存新给定的宽度和高度,然后调整Form.Top和Form.Left以使其看起来流畅。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接