假设已知N个Form.Name,如何用编码的方式动态打开它?我想要的过程如下:Procedure OpenForm(FromName: string);
begin
//代码打开名字为FromName的窗体,最好能检测此Form是否存在项目中
end;
begin
//代码打开名字为FromName的窗体,最好能检测此Form是否存在项目中
end;
解决方案 »
- Fastreport - frxGraphicUtils.pas 問題?
- 不能存取文件的问题 用adoconnection连接odbc,odbc为microsoft visual foxpro driver,连接vfp自由表,delphi程序向表追加完记录后,用vf
- 关于在dll下调用函数的问题?
- 如何用txmldocument生成以下xml文档?多谢大家喽,
- 用ShellTreeView选一个目录后的一个问题!要以‘\’结尾。
- 流问题?
- ado的多表连接,单表更新问题?以高分增送
- char 如何像 string 一样赋值?
- 读出数据库TEXT字段内容
- 帮我看看,为什么出错
- 招聘Delphi开发人员(杭州)
- 我想做一个管理文件的东西,类似资源管理器,请高手指点
FromName.Show ;
var
Component: TComponent;
begin
Component := Application.FindComponent(FormName);
if (Component is TForm) and (Component.Name = FormName) then
TForm(Component).Show;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
OpenForm('Form2');
end;不要忘记引用要开打窗体的单元
Form1.show
当然,创建窗体有很多种方法,楼上的朋友说的都可以用啊...
知道了TFormName,谁不会阿。
难题就是怎么取得TFormName,我也不会,
不过楼主不怕麻烦的话可以这么写:
function StrToForm(FormName:String):TForm
begin
Result := nil;
if FormName='Form1' then
Result := TForm1.Create(Application);
if FormName='Form2' then
Result := TForm2.Create(Application);
.......
end;
其实也不是很烦啦
还有我也非常想知道有没有一劳永逸的方法,能不能告诉一下
begin
//代码打开名字为FromName的窗体,最好能检测此Form是否存在项目中(这句话不明白)
end;
你的方法是我们现在使用的,我相信应该有办法的,只是我们还不够高
___________________________________
我是一只菜鸟,但并不是只有菜鸟才提问
function CreateFormByClassName(const ClassName: string): integer;
var
AClass: TPersistentClass;
AForm: TCustomForm;
begin
AClass := GetClass(ClassName);
if AClass <> nil then
begin
AForm := TComponentClass(AClass).Create(Application) as TCustomForm;
Result := AForm.ShowModal;
end;
end;function CreateFormByClassName(const ClassName: string): integer;
var
AClass: TPersistentClass;
AForm: TCustomForm;
begin
AClass := GetClass(ClassName);
if AClass <> nil then
begin
AForm := TComponentClass(AClass).Create(Application) as TCustomForm;
Result := AForm.ShowModal;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
CreateFormByClassName('TForm2')
end;initialization
RegisterClass(TForm2);
//这里是根据类建立窗体
procedure TForm1.Button1Click(Sender: TObject);
begin
with TFormClass(FindClass('TForm2')).Create(Application) do
try
ShowModal;
finally
Free;
end;
end;///这里是注册你要动态建立的所有窗体类,必须注册,否则找不到的
initialization
RegisterClasses([TForm2,TForm3]);
end.
procedure OpenChildForm(FormClass: TFormClass; var Fm; AOwner:TComponent);
var Child :tform; //子窗體打開過程
i:integer;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.FormS[i].ClassType=FormClass then
begin
Child:=Screen.Forms[i];
IF ((Child.WindowState=wsMaximized) OR
(Child.WindowState=wsNormal)) then
Child.BringToFront
ELSE
BEGIN
Child.WindowState:=wsNormal;
Child.BringToFront;
END ;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
end;
二、打開一般(NORMAL)窗體
APPLICATION.CreateForm(TFORMNAME,FROMNAME)
formname:=tformname.create(application); //没创建就创建一个
formname.show;//显示
procedure OpenChildForm(FormClass: TFormClass; var Fm; AOwner:TComponent);能否将var Fm 换成 Fm:string 如何写???????
多谢两位!