STRING作参数 SHOW FORM.(20分)

  • 主题发起人 主题发起人 蛐蛐
  • 开始时间 开始时间

蛐蛐

Unregistered / Unconfirmed
GUEST, unregistred user!
我的 FORM来源如下:
TABLE---->ACTION.NAME----->FORM.SHOW
也就是说类能不能作为参数传递
 
事先用一个StringList(用AddObject)存放Name和Form的一一对应的关系,
然后就简单了:
with MyStrList do
TForm(Objects[IndexOf(FormName)]).Create(Self);
 
我还是详细说明:
我的所有的子FORM的NAME 与 其父FORM的一个ACTION的NAME 相同。
如,有一个子FORM的NAME 为 Sys_info 则在其父FORM,有一ACTION的NAME 是
Sys_Info.
我希望在父FORM实现如下功能:
(SENDAS AS TACTION).NAME := t(SENDAS AS TACTION).NAME.CREATE(SELF);

 
>>也就是说类能不能作为参数传递

当然可以,有一个类类型.
例如: TFormClass = class of TForm;
我采用这种方法调用:
procedure TfrmscMain.ShowMDIForm(const AFormClass: TFormClass;
var AForm: TForm);
begin
if IsOpenMdiForm(AFormClass) then
AForm.Show
else
CreateMDIForm(AFormClass, AForm);//自定义 :AForm := AFormClass.Create(Self);
end;


 
>>(SENDAS AS TACTION).NAME := t(SENDAS AS TACTION).NAME.CREATE(SELF);
异想天开·!
 
假设你有TA1、TA2、TA3三个子窗
你首先在主窗的Create中写
begin
RegisterClasses([TA1, TA2, TA3]);
end
然后在你的Action的OnExecute中写
var F: TForm;
begin
F := TFormClass(FindClass((SENDAS AS TACTION).NAME)).Create(Application);
F.Show;
end;
 
看偶的:
var
tempsender:Tobject
(用不用它好象无所谓,懒得改了)
function TFrmMain.mycreateform(senderclass :TcomponentClass
sender:tobject):boolean;
begin
try
if not assigned(sender)then
begin
if tempsender <> sender then (tempsender as tform).close;
application.createform(senderclass,sender);
tempsender :=sender;
end;
(sender as tform).parent :=panelmain
//
(sender as tform).BorderIcons :=[];
(sender as tform).Align :=alclient;
(sender as tform).BorderStyle := bsNone;
(sender as tform).Font.name :='宋体';
(sender as tform).Font.Size :=9;

(sender as tform).show;
mycreateform:=true;
except
mycreateform:=false;
end;
end;

懒得用frame,就一直用这个代替了,呵呵
 
我采用的是203010的方法,
現在有一這樣的問題,在CREATE前,我想判斷該FORM是否CREATED。
IF CREATED THEN SHOW
ELSE CREATE
SHOW。
 
只好用遍历了。
 
后退
顶部