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

Joh*_*han 0 delphi

如何在主窗体移动的任何地方都可以使用主窗体的位置.例如,可以在此GIF图像中看到:

移动一个表格和一秒钟后移动的屏幕截图视频

我尝试使用这个delphiDabbler提示,这是为了阻止一个表单移动,但没有设法得到一些有用的东西.

Dav*_*nan 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;
Run Code Online (Sandbox Code Playgroud)

这确保了无论何时主形式的位置发生变化,另一种形式都会夹紧它.请注意,此消息可以在创建其他表单之前发送,并且在它不再有效之后发送.因此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;
Run Code Online (Sandbox Code Playgroud)

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