各位高手,请帮忙看一下如下代码,有些问题搞不定,希望大家帮一下:type
TBaseFrame=class of TFrameBase;
......private
fm:TframeBase;
function Execute(f:TFrameBase;FFrameType:TBFrame;AOwner:TComponent;Readonly:Boolean):boolean;
end;function TForm2.Execute(f:TFrameBase;FFrameType:TBFrame;AOwner:TComponent;Readonly:Boolean):boolean;
var
p:TcxTabSheet;
begin
if not Assigned(f ) then
begin P:=CreatePage; //建立页
try
f:=FFrameType .Create(AOwner,readonly); //建立FRAME
f .parent:=p;
result:=true;
except
freeandnil(f );
FreeAndNil(p);
Exit(False);
end; end ; ActivePage(f); //显示FRAMEend;procedure Tform2.loadFM(readonly:Boolean);
begin
if Execute(FM,TframeBase,self,readonly) then
fm.abc='adfas';end;我想动因建立类型为TFrameBase的FRAME ,这个FRAME是继承TFRAME的,然后建立之后使用它。为何在执行 Execute(FM,TframeBase,self,readonly) ;这一个语句后,再执行fm.abc='adfas'时FM还为空?
如果在function Execute(f:TFrameBase;FFrameType:TBFrame;AOwner:TComponent;Readonly:Boolean):boolean;这里改为
function Execute(var f:TFrameBase;FFrameType:TBFrame;AOwner:TComponent;Readonly:Boolean):boolean;编译时出现
[DCC Error] uWorktime.pas(690): E2250 There is no overloaded version of 'Execute' that can be called with these arguments这个错误,不知各位大侠有什么好建议。
TBaseFrame=class of TFrameBase;
......private
fm:TframeBase;
function Execute(f:TFrameBase;FFrameType:TBFrame;AOwner:TComponent;Readonly:Boolean):boolean;
end;function TForm2.Execute(f:TFrameBase;FFrameType:TBFrame;AOwner:TComponent;Readonly:Boolean):boolean;
var
p:TcxTabSheet;
begin
if not Assigned(f ) then
begin P:=CreatePage; //建立页
try
f:=FFrameType .Create(AOwner,readonly); //建立FRAME
f .parent:=p;
result:=true;
except
freeandnil(f );
FreeAndNil(p);
Exit(False);
end; end ; ActivePage(f); //显示FRAMEend;procedure Tform2.loadFM(readonly:Boolean);
begin
if Execute(FM,TframeBase,self,readonly) then
fm.abc='adfas';end;我想动因建立类型为TFrameBase的FRAME ,这个FRAME是继承TFRAME的,然后建立之后使用它。为何在执行 Execute(FM,TframeBase,self,readonly) ;这一个语句后,再执行fm.abc='adfas'时FM还为空?
如果在function Execute(f:TFrameBase;FFrameType:TBFrame;AOwner:TComponent;Readonly:Boolean):boolean;这里改为
function Execute(var f:TFrameBase;FFrameType:TBFrame;AOwner:TComponent;Readonly:Boolean):boolean;编译时出现
[DCC Error] uWorktime.pas(690): E2250 There is no overloaded version of 'Execute' that can be called with these arguments这个错误,不知各位大侠有什么好建议。
function Execute(var f:TFrameBase;FFrameType:TBaseFrame;AOwner:TComponent;Readonly:Boolean):boolean;function TForm2.Execute(var f:TFrameBase;FFrameType:TBaseFrame;AOwner:TComponent;Readonly:Boolean):boolean;
var
p:TcxTabSheet;
begin
if not Assigned(f ) then
beginP:=CreatePage; //建立页
try
f:=FFrameType .Create(AOwner,readonly); //建立FRAME
f .parent:=p;
result:=true;except
freeandnil(f );
FreeAndNil(p);
Exit(False);
end;end ;ActivePage(f); //显示FRAMEend;
procedure Tform2.loadFM(readonly:Boolean);
var
p:TcxTabSheet;
begin
if not Assigned(FM ) then
beginP:=CreatePage; //建立页
try
fM:= TframeBase.Create(self,readonly); //建立FRAME
f .parent:=p;
result:=true;except
freeandnil(fM );
FreeAndNil(p);
Exit(False);
end;end ;ActivePage(fM); //显示FRAME
end;
可能是因為你的FM是一個屬性,而不是變量...
FM:=Tframebase(Execute(FM,TframeBase,self,readonly))
就OK了