【发布时间】:2015-02-27 10:30:11
【问题描述】:
我一直在努力将运行时创建的表单移动到主表单的右下角。
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
// procedure FormClick(Sender: TObject);
private
{ Private declarations }
// procedure WindowPosChanging(var Msg : TMessage); message WM_WINDOWPOSCHANGING;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
F1 : TForm;
begin
F1 := TForm.Create(nil);
F1.Height := 300;
F1.Width :=300;
F1.Position := poDesktopCenter;
F1.Name := 'asdf';
F1.Left:=ClientOrigin.X;//+ ActiveControl.Left+ ClientOrigin.X;
F1.Top:=ClientOrigin.Y;//+ClientOrigin.Y;
F1.Show;
end;
//procedure TForm1.FormClick(Sender: TObject);
//var
// pt : TPoint;
//begin
// pt := mOUse.CursorPos;
// lABEL3.Caption := IntToStr(pt.X);
// label4.Caption := IntToStr(pt.Y);
//end;
//
//procedure TForm1.WindowPosChanging(var Msg: TMessage);
//begin
// Label1.Caption := IntToStr(ClientOrigin.X);
// Label2.Caption := IntToStr(ClientOrigin.Y);
//end;
end.
所以我们有这个例子。
F1.Position := poDesktopCenter;
如果您想将表单居中放置在桌面上,此命令可以完美运行,但我想要实现的是将F1 表单定位在主表单的底角。我不知道该怎么做。
类似
【问题讨论】:
-
@SertacAkyuz poDesigned 对 OP 有什么用处,尤其是因为主窗体可能与设计时不在同一位置?事实上,我强烈建议不要在任何时候使用 poDesigned。为什么?因为如果您的应用程序是在分辨率较小的显示器上启动的,则表单实际上可能位于可视区域之外,因此用户无法访问。
-
@Silver - 我不明白你的问题。如果您希望表单使用您分配的左侧和顶部,您必须设置位置'poDesigned'。
-
是的,但 OP 试图在使用绝对屏幕位置的 poDesigned 位置表单时相对于其主表单位置定位第二个表单。如果您一直在 1900x1080 等屏幕尺寸上开发应用程序,并且在设计时放置了表单,让我们说在 1200:1000 在屏幕尺寸为 1024x768 的显示器上运行此类应用程序会导致表单位于可见区域之外因为它的左侧和顶部位置将大于屏幕宽度和高度。
-
除了在使用内置表单设计器的较新的 Delphi 版本中如何确定设计时表单的位置,而不是像在旧的 Delphi 版本中常见的那样独立的 winow。
-
@SilverWarior Sertac 是对的,Position 必须设置为 poDesigned,否则表单不会根据 Left 和 Top 自行定位。我只是在查看对我的关于非父位置 inside 其他表单边框的答案的更正,但 BorderWidth 是 zero!
标签: forms delphi delphi-xe7