如何将表单传递给过程作为参数并操作其属性?
假设我想在我制作的单元中创建一个按名称显示和隐藏表单(作为参数传递)的过程。如何将表单传递给过程作为参数并操作其属性?
我怎么能这样做,什么是语法?
感谢。
编辑
我在寻找类似:弹出窗口(FormMy, '展');从我的单位内部。
您可以编写一个程序是这样
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;
@Bharat:你不需要这个程序,你只需写MyForm.Visible:= True – 2010-12-11 12:39:29
@大卫:你是对的,但如果我有多种形式,为此我必须显示/隐藏,那么这将会有所帮助。 – Bharat 2010-12-11 12:44:21
@Bharat:不会的。书面例程与Visible属性完全可以互换。事实上,你可以将你的函数的主体写成Form.Visible:= Show,这使得它变得更加清晰。 – 2010-12-11 13:08:20
假设形式用父窗体作为所有者创建[.Create(自我),这应该工作:
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;
我认为这段代码现在可以工作。我认为你的意思是ParentForm而不是Component。如果我记得正确,因为名称是在TComponent中引入的,所以也不需要TForm情况。 – 2010-12-11 10:24:12
修正了,谢谢大卫 – norgepaul 2010-12-11 10:49:45
我想你可以将ShowForm分配给'ParentForm.Components [i] .Visible' – CodesInChaos 2010-12-11 10:52:21
就可以在CustomForms财产环路(也有他们的CustomFormCount)全局Screen对象。这只需枚举应用程序中所有可能是您想要的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;
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;
如果没有找到'FormName',这将返回'Screen.Forms'中的最后一个表单。如果你将'Break'改为'Exit',并将'AForm:= nil'移到最下面,它就可以工作。 – jasonpenny 2010-12-11 17:41:50
@jasonpenny,你是对的,谢谢。我很快写了代码,并没有测试它。我更新了该帖子以解决该问题。 – vcldeveloper 2010-12-11 20:12:29
什么是Popup?为什么你不写FormMy.Show?我想你需要详细说明你的问题,以便我们能够帮助你。 – 2010-12-11 12:38:32
我使用类似Messenger的效果显示表单,所以我不想在每种表单中编写代码。这就是Popup调用Form.Show的原因,同时也将该表单放置在正确的位置并执行效果。 – emurad 2010-12-11 20:03:54