起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 430|回复: 12

【搞定】关闭系统后从Messenger运行任务,自动登录系统的问题**

[复制链接]
发表于 2007-3-15 14:01:39 | 显示全部楼层 |阅读模式
在我们的界面方案中,
在登录窗体的FormShow中执行了以下代码:  
FLoginMethod := TLoginMethod.Create;
  FLoginMethod.LoginEvent := AutoLogin;
  BizRtSrvr.BusinessRuntimeServer.RegisterMethod(FLoginMethod);

但不知道了为什么不触发AutoLogin过程?

系统初始化中的下面代码也已经执行了,
procedure TINIT.StartServer;
begin
  BizRtSrvr.BusinessRuntimeServer.Listener.AutoListen := True;
end;


我们的登录界面是嵌入在主窗体中的非模式窗体(先显示主窗体,后有登录界面),不知是否和此有关?
回复

使用道具 举报

发表于 2007-3-15 16:07:50 | 显示全部楼层
请问你是在哪个版本上做的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-15 16:13:35 | 显示全部楼层
X3的2617版本
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-16 11:52:55 | 显示全部楼层
这个过程的触发,为何和本窗体的显示模式和窗体创建的先后顺序有关,想不通哦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-16 14:03:05 | 显示全部楼层
人呢??????????????????????
回复 支持 反对

使用道具 举报

发表于 2007-3-16 15:23:08 | 显示全部楼层
现在基本确定跟这里的代码没有关系,在LoginMethod之前就出错了
只能把主界面整个打包拿过来跟了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-16 16:54:22 | 显示全部楼层
据说和TLoginMethod的注册时机没有关系,那你们那里搞一个干净的环境也就可以重现了。
下面是是一个测试的窗体,在平台的主窗体的Create中将CT1 SHow或者SHowModal 出来,都没有触发AutoLogin。
unit CT1;

interface

uses
  Business.System, Business.Forms;

type
  TCT1 = class(TForm)
    procedure BizFormShow(Sender: TObject);
    procedure BizFormClose(Sender: TObject; var Action: TCloseAction);
  private
    {private declarations}
    FLoginMethod: TLoginMethod;
    procedure AutoLogin(const UserName, Password, PersonMemberURL: string);
  public
    {public declarations}
  end;

implementation

procedure TCT1.AutoLogin(const UserName, Password, PersonMemberURL: string);
begin
  Dialogs.ShowMessage('AutoLogin');
end;

procedure TCT1.BizFormShow(Sender: TObject);
begin
  FLoginMethod := TLoginMethod.Create;
  FLoginMethod.LoginEvent := AutoLogin;
  BizRtSrvr.BusinessRuntimeServer.RegisterMethod(FLoginMethod);
end;

procedure TCT1.BizFormClose(Sender: TObject; var Action: TCloseAction);
begin
  BizRtSrvr.BusinessRuntimeServer.UnregisterMethod(FLoginMethod);
  FLoginMethod.Free;
end;

end.

打个包实在麻烦,涉及的东西太多了,你们恢复起来也麻烦。麻烦你们做个上面的测试。谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-16 20:41:53 | 显示全部楼层
问题在干净的环境里可以重现,修改的地方有:
1:系统初始化里的 procedure TINIT.DoRun; 注释掉以下代码
{ if TSystemCore.Operator = nil then
  begin
    FLogoned := InternalLogon;
    if not FLogoned then
    begin
      Terminate;
      Exit;
    end;
  end;   }

2:系统接口:
function TSYSTEMINTERFACE.CreateMainForm(AContext: TContext): TForm;
begin
  Result := TCT1.Create(AContext);
  //Result := TStandardStyleMainForm.Create(AContext);
end;

3:在简洁风格界面方案的窗体库里创建了窗体1为主窗体
procedure TCT1.BizFormShow(Sender: TObject);
var
  lForm : TSYSTEMLOGINDIALOG;
begin
  if TSystemCore.Operator = nil then
   begin
     lForm:=TSYSTEMLOGINDIALOG.Create(Context);
     lForm.SHowModal;
     lForm.Free;
   end;
end;

procedure TCT1.BizFormCreate(Sender: TObject);
var
  lForm : TSYSTEMLOGINDIALOG;
begin
   {if TSystemCore.Operator = nil then
   begin
     lForm:=TSYSTEMLOGINDIALOG.Create(Context);
     lForm.SHowModal;
     lForm.Free;
   end;  }
end;
如果将登录的窗体放在Create里调用,可以自动登录,但如果放在Show里就不行。

aa.rar

853.07 KB, 下载次数: 80

回复 支持 反对

使用道具 举报

发表于 2007-3-17 10:30:48 | 显示全部楼层
收到
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-17 16:13:32 | 显示全部楼层
多次测试,TLoginMethod.Invoked的触发好像和消息队列有关,
BizRtSrvr.BusinessRuntimeServer.RegisterMethod(FLoginMethod);
Business.Forms.Forms.Application.ProcessMessages;
要增加上面一句才行。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-28 17:59 , Processed in 0.044944 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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