德尔福7 - 第二种形式可以跟随主体的位置

时间:2015-05-29 19:37:28

标签: delphi

如何使第二种形式可以跟随主形式在主窗体移动的位置。例如,可以在此GIF图像中看到:

Screen capture video of moving one form and a second following its movements

我尝试使用此delphiDabbler提示,这是停止表单移动,但无法获得有效的内容。

2 个答案:

答案 0 :(得分:5)

在主要表格中你需要这个:

type
  TMainForm = class(TForm)
  protected
    procedure WMWindowPosChanged(var Msg: TWMWindowPosChanged); 
      message WM_WINDOWPOSCHANGED;
  end;

....

procedure TMainForm.WMWindowPosChanged(var Msg: TWMWindowPosChanged);
begin
  inherited;
  if Assigned(OtherForm) and not Application.Terminated then
  begin
    OtherForm.Left := Left + Width;
    OtherForm.Top := Top;
  end;
end;

这可以确保每当主窗体的位置发生变化时,另一种形式会固定它。请注意,此消息可以在创建其他表单之前发送,并且在它不再有效之后发送。因此if声明。

在另一种形式上这样做:

type
  TOtherForm = class(TForm)
  protected
    procedure WMWindowPosChanging(var Msg: TWMWindowPosChanging); 
      message WM_WINDOWPOSCHANGING;
  end;

....

procedure TOtherForm.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
begin
  inherited;
  if not Application.Terminated then
  begin
    Msg.WindowPos.x := MainForm.Left + MainForm.Width;
    Msg.WindowPos.y := MainForm.Top;
  end;
end;

这可以确保拒绝任何移动其他表单的尝试。

答案 1 :(得分:2)

处理WM_WINDOWPOSCHANGING以同时移动您的其他表单。

  ...

   public
     OldTop, OldLeft: Integer;
     procedure WindowPosChanging(var Msg: TWMWindowPosChanging);
       message WM_WINDOWPOSCHANGING;
   end;

   ...

 implementation

   ...

 procedure TForm1.WindowPosChanging(var Msg: TWMWindowPosChanging);
 var
     DTop, DLeft: Integer;
 begin      
   // well and here inside of you put the relationship of like you 
   // want him to move.   

   // an example of this moving them in the same sense can be...

   if (Form2 = nil) or (not Form2.Visible) then Exit;

   // this line is to avoid the error of calling them when the forms 
   // are creating or when they are not visible...

   DTop := Top - OldTop;
   DLeft := Left - OldLeft;

   Form2.Top := Form2.Top + DTop;
   Form2.Left := Form2.Left + DLeft;

   OldTop := Top;
   OldLeft := Left;

   inherited;
 end;

来源: http://delphi.cjcsoft.net/viewthread.php?tid=43047
(原始代码根据评论中的建议更新)

或类似的东西 Two forms to snap each other