如何将表单作为参数传递给过程并操纵其属性?

时间:2010-12-11 08:31:57

标签: delphi pascal

假设我想在我创建的单元中创建一个过程,该单元按名称显示和隐藏表单(作为参数传递)。

我怎么能这样做,语法是什么?

感谢。

修改

我正在寻找类似的东西:Popup(FormMy,'Show');从我的单位内部。

4 个答案:

答案 0 :(得分:0)

假设表单是以父表单作为所有者[.Create(Self)]创建的,这应该有效:

procedure ShowFormByName(const ParentForm: TForm; const FormName: String; ShowForm: Boolean);
var
  i: Integer;
begin
  for i := 0 to pred(ParentForm.ComponentCount) do
  begin
    if (ParentForm.Components[i] is TForm) and ParentForm.Components[i].Name = FormName) then
    begin
      if ShowForm then
        TForm(ParentForm.Components[i]).Show
      else
        TForm(ParentForm.Components[i]).Hide;

      Break;
    end;
  end;
end;

答案 1 :(得分:0)

您可以循环遍历全局Screen对象的CustomForms属性(它们有CustomFormCount)。这只是列举了应用程序中可能是您​​想要的所有VCL表单。

如果您正在寻找代码,它将是这样的:

for i := 0 to Screen.CustomFormCount-1 do begin
  Form := Screen.CustomForms[i];
  if Form.Name=TargetName then begin
    DoSomething(Form);
    break;
  end;
end;

答案 2 :(得分:0)

你可以写一个像这样的程序

procedure ShowMyForm(Form: TForm; Show: Boolean);
begin
  if Show then
    Form.Visible := True
  else
    Form.Visible := False;
end;

并通过ShowMyForm(MyForm, True);致电您的表单,并确保您的单位uses Forms

大卫说你可以成功

procedure ShowMyForm(Form: TForm; Show: Boolean);
begin
    Form.Visible := Show 
end;

答案 3 :(得分:0)

function GetFormByName(const FormName: string): TForm;
var
  i : Integer;
begin
  Result := nil;
  for i := 0 to Screen.FormCount - 1 do
  begin
    if SameText(Screen.Forms[i].Name,FormName) then
    begin
      Result := Screen.Forms[i];
      Break;
    end;
  end;
end;