将表格移动到右下角
Move form to bottom right corner
我一直在努力将 运行 时间创建的表单移动到主表单的右下角。
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
表单定位在主表单的底角。我不知道该怎么做。
像这样
在以下所有情况下,使用
F1.Position := poDesigned;
F1 parent = Form1,Form1 边框内右下角
F1.Parent := self;
F1.Left := self.ClientWidth - F1.Width;
F1.Top := self.ClientHeight - F1.Height;
Self
是可选的,但清楚地表明您引用了 Form1 的属性,您正在执行代码的上下文中。
未分配 F1 父项,右下角有重叠边框
F1.Left := Left + Width - F1.Width;
F1.Top := Top + Height - F1.Height;
F1 父级未分配,右下角在 Form1 的边界内
F1.Left := ClientOrigin.X + ClientWidth - F1.Width;
F1.Top := ClientOrigin.Y + ClientHeight - F1.Height;
感谢 Sertac 提醒我 ClientOrigin
我一直在努力将 运行 时间创建的表单移动到主表单的右下角。
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
表单定位在主表单的底角。我不知道该怎么做。
像这样
在以下所有情况下,使用
F1.Position := poDesigned;
F1 parent = Form1,Form1 边框内右下角
F1.Parent := self;
F1.Left := self.ClientWidth - F1.Width;
F1.Top := self.ClientHeight - F1.Height;
Self
是可选的,但清楚地表明您引用了 Form1 的属性,您正在执行代码的上下文中。
未分配 F1 父项,右下角有重叠边框
F1.Left := Left + Width - F1.Width;
F1.Top := Top + Height - F1.Height;
F1 父级未分配,右下角在 Form1 的边界内
F1.Left := ClientOrigin.X + ClientWidth - F1.Width;
F1.Top := ClientOrigin.Y + ClientHeight - F1.Height;
感谢 Sertac 提醒我 ClientOrigin