2015-02-27 4 views
1

Я некоторое время пытаюсь переместить созданную во времени форму в нижний правый угол основной формы.Переместить форму в нижний правый угол

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 формы в правом нижнем углу главной формы. Я не могу понять, как это сделать.

Что-то вроде этого enter image description here

+0

Используйте 'poDesigned'. –

+0

@SertacAkyuz Как будет poDesigned быть полезным для OP, особенно потому, что основная форма может быть не такой же, как и во время разработки? Infact Я настоятельно рекомендую не использовать poDesigned в любое время. Зачем? Если ваше приложение запускается на мониторе с меньшим разрешением, форма может быть размещена вне области видимости и, следовательно, недоступна для пользователя. – SilverWarior

+0

@ Сильвер - Я не понимаю ваш вопрос. Если вы хотите, чтобы форма использовала левый и верхний вы назначили, вам нужно установить позицию «poDesigned». –

ответ

7

Во всех случаях ниже, используйте

F1.Position := poDesigned; 

F1 родитель = 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; 

Заслуга Sertaç за напоминание о ClientOrigin

+0

@Cuca - Помогает ли это решить вашу проблему? –

+0

@SertacAkyuz Я был занят другим проектом. Я вернусь с ответом, когда у меня будет время проверить его, поскольку я не могу сделать это из дома. Я постараюсь сделать это завтра. – CiucaS

+0

@TomBrunberg, я пробовал ваше решение, оно работает для того, что я просил. Но я только обнаружил, что моя форма не вызывается из другой формы, она вызывается из компонента DBGrid, который выравнивает весь клиент в форму => Left/Top всегда будет 0. – CiucaS

Смежные вопросы