关于登陆窗体和主窗体的问题,急用~~~ Delphi登陆窗体主窗体服务器验证 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 主窗体create时连接服务器,登录窗体验证,然后主窗体show 我也是这个意思,不过登录窗体内向服务器发送数据要用到主窗体的socket吧,这个要怎么引用呢,不想将主窗体指针传进去 可以在主窗体的oncreate 或 afterconstruction事件中连接服务器,登录验证。这个时候主窗体已经创建了,clientsocket可以用,只是没有显示出来而已。如果主窗体是系统的mainform,也可以用Applicaiton.Mainform引用。 恩,你说的不错,感觉可行,在登录窗体中调用socket向服务器发送数据,不过,服务器返回的登录结果会在主窗体的socket读事件里,如果失败,是要在这个事件里再次调用登录窗体么?不好意思,搞的太糊涂了,请指教 你可以新建个 Data Module ,在新建的 NEW页,有个窗体给你放控件,且没有显示的窗口。clientsocket放这里。Project 项目文件里把创建Data Module的那行移动到 Application.Initialize下的第一行。然后你在登录页和首页里都引用它,就都可以使用Data Module里的clientsocket控件了。或者随便写个类,在类里用代码申明和初始化clientsocket类,在 Application.Initialize下对这个类进行初始化或者直接在类里用initialization 初始化和finalization 释放。要用的窗口直接引用就行了。又或者登录窗口和主窗口用两个clientsocket ,各不相干。第一种方法最简单,拖控件的,代码写的,什么都全都可以放里面放。 没看仔细。你还要在登录窗体得到返回,那么可以用第三个方法,或者用函数指针。把登录窗体里的函数传递给 Data Module ,让 Data Module 里的 clientsocket 收到消息后调用。TPFunction = procedure(Str: String) of object; 恩,你说的不错,感觉可行,在登录窗体中调用socket向服务器发送数据,不过,服务器返回的登录结果会在主窗体的socket读事件里,如果失败,是要在这个事件里再次调用登录窗体么?不好意思,搞的太糊涂了,请指教这个要看你自己的设计思路了,一般登录失败会在登陆窗口中反馈给用户,提示是密码错还是用户名不存在,登录成功后才关闭登录窗口。可能你需要在登录窗口中引用clientsocket,有四种方法:1 使用application.mainform获得主窗体的引用,不过这个引用是TForm类型的。你要再把引用强制类型转换实际的主窗体类型,就可以取得clientsocket。2 在主窗体的oncreate或afterconstructor事件中创建登陆窗体时,把主窗体本身(self)作为传入的owner参数,这样在登录窗体中用owner属性就可以访问到主窗体了,下一步就和 1 一样。3 像8楼说的那样,预先创建一个包含clientsocket的datamodule,主窗体和登录窗体都引用它。4 以上的方法都要在登录窗体单元引用其他的单元(主窗体单元或datamodule单元),耦合度较高。要避免这个问题可以这样做:重载登录窗体的constructor,再多加个参数,这样新constructor就变成了create(owner: TComponent; skt:TClientSocket);主窗体创建登录窗体时用这个新的构造方法,把主窗体的clientsocket作为第二个参数传进去,在新构造方法中把传入的skt保存到一个私有的变量中就可以多次使用了。 恩,你说的不错,感觉可行,在登录窗体中调用socket向服务器发送数据,不过,服务器返回的登录结果会在主窗体的socket读事件里,如果失败,是要在这个事件里再次调用登录窗体么?不好意思,搞的太糊涂了,请指教这个要看你自己的设计思路了,一般登录失败会在登陆窗口中反馈给用户,提示是密码错还是用户名不存在,登录成功后才关闭登录窗口。可能你需要在登录窗口中引用clientsocket,有四种方法:1 使用application.mainform获得主窗体的引用,不过这个引用是TForm类型的。你要再把引用强制类型转换实际的主窗体类型,就可以取得clientsocket。2 在主窗体的oncreate或afterconstructor事件中创建登陆窗体时,把主窗体本身(self)作为传入的owner参数,这样在登录窗体中用owner属性就可以访问到主窗体了,下一步就和 1 一样。3 像8楼说的那样,预先创建一个包含clientsocket的datamodule,主窗体和登录窗体都引用它。4 以上的方法都要在登录窗体单元引用其他的单元(主窗体单元或datamodule单元),耦合度较高。要避免这个问题可以这样做:重载登录窗体的constructor,再多加个参数,这样新constructor就变成了create(owner: TComponent; skt:TClientSocket);主窗体创建登录窗体时用这个新的构造方法,把主窗体的clientsocket作为第二个参数传进去,在新构造方法中把传入的skt保存到一个私有的变量中就可以多次使用了。恩恩,谢谢回答,很相信,好了结贴散分 三层数据库 mysql socket方式联接 ,存取图片 ,请教?现在能取不能存 请教DELPHI高手 TFloatField 等等组件是从那里添加的?? 简单的查询问题帮帮新手 tidhttp新问题在线等待,急急急(绝对高分) 有谁知道USER DSN和SYSTEM DSN的区别?关于ODBC数据源的问题! 困扰了几天的问题:Delphi中使用MSComm的问题,各位大虾,帮帮忙吧!我快崩溃了!!! 紧急求助~~关于VARCHAR(1000)的字段 在网页中模拟键盘输入 运行期嵌入ole对象 登录界面增加一个版本信息. 拖放文件消息模拟可行性?
我也是这个意思,不过登录窗体内向服务器发送数据要用到主窗体的socket吧,这个要怎么引用呢,不想将主窗体指针传进去
Project 项目文件里把创建Data Module的那行移动到 Application.Initialize下的第一行。
然后你在登录页和首页里都引用它,就都可以使用Data Module里的clientsocket控件了。或者随便写个类,在类里用代码申明和初始化clientsocket类,在 Application.Initialize下对这个类进行初始化
或者直接在类里用initialization 初始化和finalization 释放。要用的窗口直接引用就行了。又或者登录窗口和主窗口用两个clientsocket ,各不相干。
第一种方法最简单,拖控件的,代码写的,什么都全都可以放里面放。
可能你需要在登录窗口中引用clientsocket,有四种方法:
1 使用application.mainform获得主窗体的引用,不过这个引用是TForm类型的。你要再把引用强制类型转换实际的主窗体类型,就可以取得clientsocket。
2 在主窗体的oncreate或afterconstructor事件中创建登陆窗体时,把主窗体本身(self)作为传入的owner参数,这样在登录窗体中用owner属性就可以访问到主窗体了,下一步就和 1 一样。
3 像8楼说的那样,预先创建一个包含clientsocket的datamodule,主窗体和登录窗体都引用它。
4 以上的方法都要在登录窗体单元引用其他的单元(主窗体单元或datamodule单元),耦合度较高。要避免这个问题可以这样做:重载登录窗体的constructor,再多加个参数,这样新constructor就变成了create(owner: TComponent; skt:TClientSocket);
主窗体创建登录窗体时用这个新的构造方法,把主窗体的clientsocket作为第二个参数传进去,在新构造方法中把传入的skt保存到一个私有的变量中就可以多次使用了。
可能你需要在登录窗口中引用clientsocket,有四种方法:
1 使用application.mainform获得主窗体的引用,不过这个引用是TForm类型的。你要再把引用强制类型转换实际的主窗体类型,就可以取得clientsocket。
2 在主窗体的oncreate或afterconstructor事件中创建登陆窗体时,把主窗体本身(self)作为传入的owner参数,这样在登录窗体中用owner属性就可以访问到主窗体了,下一步就和 1 一样。
3 像8楼说的那样,预先创建一个包含clientsocket的datamodule,主窗体和登录窗体都引用它。
4 以上的方法都要在登录窗体单元引用其他的单元(主窗体单元或datamodule单元),耦合度较高。要避免这个问题可以这样做:重载登录窗体的constructor,再多加个参数,这样新constructor就变成了create(owner: TComponent; skt:TClientSocket);
主窗体创建登录窗体时用这个新的构造方法,把主窗体的clientsocket作为第二个参数传进去,在新构造方法中把传入的skt保存到一个私有的变量中就可以多次使用了。
恩恩,谢谢回答,很相信,好了结贴散分