如何查找正在调用公共程序的表单

时间:2018-07-30 21:36:31

标签: delphi procedure vcl self

我的表单太多,创建的过程应该在所有表单上运行

procedure TDM.SetupForm(Max, DisableResize,
DisableMove: Boolean; FormWidth: Integer = 0; FormHeight: Integer = 0);
var
Form: TForm;
begin
Form := ??? // How to find the what form is running this procedure?
  Form.AutoScroll := True;
  if Max then
  begin
    Form.Width := Screen.WorkAreaWidth;
    Form.Height := Screen.WorkAreaHeight;
    Form.Top := 0;
    Form.Left := 0;
  end
  else
  begin
    if FormWidth > 0 then
      Form.Width := FormWidth;
    if FormHeight > 0 then
      Form.Height := FormHeight;
    Form.Position := poScreenCenter;
    Form.Align := alCustom;
  end;
  if DisableResize then
    DeleteMenu(GetSystemMenu(Form.Handle, False), SC_SIZE, MF_BYCOMMAND);
  if DisableMove then
    DeleteMenu(GetSystemMenu(Form.Handle, False), SC_MOVE, MF_BYCOMMAND);

  Form.BorderIcons := [biSystemMenu];
  if Form.Height > Screen.WorkAreaHeight then
    Form.Height := Screen.WorkAreaHeight;
  if Form.Width > Screen.WorkAreaWidth then
    Form.Width := Screen.WorkAreaWidth;

  Form.ShowHint := True;
  Form.OnClose := CloseFormAction;
end;

我在Procedure事件中称此FormCreate 如何找到调用此procedure的表单,并在相同的过程中使用它而不将其作为参数传递?

1 个答案:

答案 0 :(得分:2)

  

我在FormCreate事件上调用此过程

在我看来,您实际上不需要知道“最后创建的表单”,而是当前正在创建的表单,您要为其调用此代码。如果是这种情况,只需在此过程中添加一个TForm参数,而不是声明一个变量并尝试从其他位置获取它……

procedure TDM.SetupForm(Form: TForm; Max, DisableResize,
  DisableMove: Boolean; FormWidth: Integer = 0; FormHeight: Integer = 0);
begin
  ...Use the `Form` parameter...

然后,只要您从Self调用FormCreate,就可以将DM.SetupForm(Self, .... 传递给它。

MyApp.UICommon.pas

最终,最好先创建一个基础表单,然后再从该基础继承其余所有表单,从而最好地完成这种事情。这样的代码将在基本表单的构造函数中实现,然后您不必从要应用它的每个表单中显式调用它。但是,看来您已经编写了许多表格,这将需要修改所有现有代码以考虑基本表格。这种设计应该从开发之初就开始。


我还必须注意,将这种性质的UI代码放入数据模块中不是正确的做法。数据模块的用途是与UI断开连接。这就是为什么它实际上不是可见形式,而是非视觉组件的解决方案。为此,最好将此类代码放在独立的单元中,例如img