我的表单太多,创建的过程应该在所有表单上运行
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
的表单,并在相同的过程中使用它而不将其作为参数传递?
答案 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
。