起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 195|回复: 3

有关DoRun方法

[复制链接]
发表于 2009-12-30 10:05:19 | 显示全部楼层 |阅读模式
我在功能里加了下面的代码

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';

更正一下第二个问题,不管是否注销代码都会出现功能窗体打不开的情况.

大侠们帮忙解决一下...
回复

使用道具 举报

发表于 2009-12-30 10:51:29 | 显示全部楼层
是否缺少一个inherited?加上 试试。

。。。。//其他代码忽略
  end;
    inherited;
end;//1楼代码中的最后一行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-30 11:24:03 | 显示全部楼层
真的是....
麻烦结贴吧
呵呵,感谢....
回复 支持 反对

使用道具 举报

发表于 2009-12-30 11:25:52 | 显示全部楼层
客气,下次请注意哦。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 01:33 , Processed in 0.037550 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表