|
我在功能里加了下面的代码
procedure TTSGL.DoRun;
var
I: Integer;
S: string;
lFunc: TFunc;
lFuncIsRunning: Boolean;
tmpUniqueId:string;
begin
//加些判断是否关闭功能。
//判断当前要执行的功能是否已经运行
S := 'Biz:\OABGZDHXT\TSGL.FUNC';
for I := 0 to TSystemCore.FuncManager.RunningFuncCount-1 do
begin
if SysUtils.UpperCase(TSystemCore.FuncManager.RunningFuncs[I].BizClassURL.BizURL.URL) = SysUtils.UpperCase(S) then
begin
Dialogs.ShowMessage('已经打开相同功能!');
lFuncIsRunning := True;
break;
end else
begin
Dialogs.ShowMessage('正在打开!');
lFuncIsRunning := False;
end;
end;
if lFuncIsRunning = true then
begin
self.Terminate;
end else
begin
tmpUniqueId:= SYSTEMCORE.TFuncManager.GetFuncUniqueID(context.parent, SysUtils.UpperCase(S),'');
lFunc:= SYSTEMCORE.TSYSTEMCORE.FuncManager.FindRunning(tmpUniqueId);
//Dialogs.ShowMessage(tmpUniqueId);
TSystemCore.FuncManager.ActivateFunc(lFunc) ;
end;
end;
有两个问题
1.为什么会当lFuncIsRunning := False的时候DoRun会一直从头再执行,陷入死循环呢,当我把下面的代码注销后就不会出现死循环
tmpUniqueId:= SYSTEMCORE.TFuncManager.GetFuncUniqueID(context.parent, SysUtils.UpperCase(S),'');
lFunc:= SYSTEMCORE.TSYSTEMCORE.FuncManager.FindRunning(tmpUniqueId);
//Dialogs.ShowMessage(tmpUniqueId);
TSystemCore.FuncManager.ActivateFunc(lFunc) ;
2.注销了代码后不会再出现死循环,但是功能窗体却打不开,此时如果关闭所有功能的话又会提示功能已经运行.我要运行的功能是S := 'Biz:\OABGZDHXT\TSGL.FUNC';
更正一下第二个问题,不管是否注销代码都会出现功能窗体打不开的情况.
大侠们帮忙解决一下... |
|