請問這樣是否可以創建(50分)

  • 主题发起人 主题发起人 fusm_2000
  • 开始时间 开始时间
F

fusm_2000

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TFrm_SfcMainDoc.createform(formid:Tform;formname:string);
begin

if formid<>nil then formid.BringToFront else
begin
Application.Create(formid);
try
formid.Name:=formname;
frmid.Show;
except
frmid.free;
end;
end;
end;
因為我試是不行的﹐請問該怎么做?
 
procedure TFrm_SfcMainDoc.createform(formid:Tform;formname:string);
begin
if anssigned(formid) then formid.BringToFront else
begin
formid:=Tform.create(Application);
try
frmid.Show;
except
if anssigned(formid) then formid.free;
end;
end;
end;
你那种创建 必须有实列才行
 
我创建的窗體是有實例﹐但是通過一個變量名稱獲得窗體名的﹐我的目的是這樣的﹐一個樹狀結構的結點﹐我點擊它是得到結點TEXT,它就可以看作是窗體的名稱﹐再要SHOW出這個窗體來,請問還有沒辦法﹗謝了﹗
 
你的说法不好理解,下面的解答基于对你的化的猜测。
1、窗体的名称和实列的名称不是一回事。窗体的名称和实列的类型无关。
比如 你可以创建很多个TTable ,他们可以有不同的名字或者没名字(name=''),但他们的类名都是TTable。
2、对你意思的理解,我猜你应该是在IDE创建了很多个不同界面窗体,你想把他们显示出来,你在一个树装结构的每个人子节点上存储了它们的名称,这个名称可能是你创建那些窗体时,IDE自动为窗体定义的那个窗体变量名。
3、你没让它们在程序启动时自动创建。
若是这种情况,你可以用一系列if 语句 通过那个名称去判断类,然后用这个类创建船体并显示。
比如, 你建了如下窗体:
Tform_test=class(TForm)
....
end;
form_test: Tform_test;
implementation
....
end.
你点击节点 传递函数
createform(form_test)
你想让这个函数创建并显示那个窗体

那么函数大体应该如下。
procedure createform(formname:string)
var
fm:Tform;
begin
if formname='form_test' then
fm:=Tform(Tform_test.create(appliction)) //是否强类型转换看你设的编译条件
else if formname='form_test1' then
fm:=Tform(Tform_test1.create(appliction))
....
end;//end if
fm.ShowModal;
try
finally
fm.free;
end;
end;

另外问个体外话:你为何用繁体?
 
謝謝你的幫助﹗此問題已ok﹐電腦上裝的系統是繁體版是因為在台資工司上班﹗
 
后退
顶部