客户要求二次开发,自己添加Form,然后修改一下配置文件就要求能把Form添加到程序中,也就是说我只能以字符串的形式知道这个Form的存在,举个例子说,'Frm_Customer'就是客户新添加的窗体,然后我在这种情况下,怎么能够显示他呢?可以是在一个按钮的消息处理函数中显示var
FrmName : String;
......
FrmName := 'FrmCustomer';
......ButMy.Click;
begin
???
end;
FrmName : String;
......
FrmName := 'FrmCustomer';
......ButMy.Click;
begin
???
end;
自定义TForm类型的变量。然后,
CustomForm :=TForm.Create(Self);
CustomForm.Name :=FrmName; //你读取到的客户新添加的窗体,然后自己根据客户给定的一些窗体属性然后再设置你的CustomForm的属性
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms[i].ClassType=FormClass then
begin
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(fm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
if not Assigned(Application.FindComponent('AddedForm')) then
begin
Application.CreateForm(Self.Parent.ClassType,AddedForm);
....
end;
end;
出错
Error: Incompatible types: 'TComponentClass' and 'TClass'我不知道我是不是没说清楚啊?
就是我先做一套系统出来,给客户提供源代码,它只需要在程序里面加入Form,比如说Form的名字叫'Frm_Customer',然后它只需要修改我的配置文件,然后告诉我在什么地方显示这个Form,比如说就是在But.Click中,那我就是相当于只知道一个Form 的名字,然后要在函数中响应显示,具体这个Form存在不存在,我都不知道。
var
i: Integer;
RetForm: TForm;
begin
Result := nil;
try
frmName := LowerCase(frmName);
for i:=0 to Application.ComponentCount-1 do
if Application.Components[i] is TForm then
begin
RetForm := TForm(Application.Components[i]);
if LowerCase(RetForm.name)= frmName then
begin
Result:= RetForm;
Break;
end;
end;
except
end;
end;