RemoteDataModal的OnCreate中实现功能为什么会出错误? ( 积分: 50 )

  • 主题发起人 主题发起人 yaxich
  • 开始时间 开始时间
Y

yaxich

Unregistered / Unconfirmed
GUEST, unregistred user!
在服务器的RemoteDataModal的OnCreate中写了一些代码实现对所在功能主窗口(TForm)上一些控件的操作,但在测试中发现,程序运行完这些代码后就没有响应了,请高手指点这是怎么回事,谢谢!
 
在服务器的RemoteDataModal的OnCreate中写了一些代码实现对所在功能主窗口(TForm)上一些控件的操作,但在测试中发现,程序运行完这些代码后就没有响应了,请高手指点这是怎么回事,谢谢!
 
各位老大,给点指点吧?!
 
客户端不连接这个RemoteDataModal是不会创建的,自然不会发生什么OnCreate了
 
TO pazee:
按照我的理解,大致是客户端在申请连接时,服务端便创建一个RemoteDataModal的实例,创建成功,返回客户端信息为连接成功。上述OnCreate在此实例的创建过程中执行,但出现了上述的问题,而且,当服务段的程序无反映后,杀掉此Exe进程,会自动启动一个信息服务程序实例。如果去掉对主窗体的操作,则一切正常了。
高手们遇到这种情况吗?请指教!谢谢!
 
具体情况不太了解,不好确定原因。
你采用的线型是什么,另外你对Form进行了那些操作?
 
pazee,您好!
详细情况如下:
1.Delphi7中创建一个普通的工程(具有默认的Form1),创建一个RemoteDataModal(以下建成Rmd),默认设置(Mulitple Instance + Aprtment)。
2.在Form1中添加一个TLabel为Label1,Label1的Caption设为'0',声明一Public方法为:
procedure TForm1.AddAClient;
begin
Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1);
end;
3.在Rmd的OnCreate中调用Form1的AddAClient方法。
4.客户端用SocketConnection连接,调试中当SocketConnection.Connected := True时,
发现服务端的Rmd的OnCreate执行,但执行完毕后就没有反应了。
对此百思不得其解,请高手指点!
 
这位大哥和我的一样啊,我也在纳闷呢啊。你如果把远程模块中的
initialization
TComponentFactory.Create(ComServer, Tff,
Class_ff, ciMultiInstance, tmApartment);
end.
的, tmApartment去掉就正常了啊。我现在也想知道能不能去掉?去掉后有什么影响。
 
我的现在又可以了啊。我只是操作过两个操作:1、install com+ 2。是我做了个free后又用tmApartment,具体什么原因我还没搞明白
 
靴子:
“做了个Free后又用tmApartment”是什么意思呀?
 
只有用单线程模式时,才能够直接访问主窗体控件.原因不是很明白.但至少有一条,那就是客户端连接时,只是RemoteDataModal被创建,在OnCreate中的代码执行时,Application和主窗体实际上并未创建,所以出错.
我的解决办法:
在远程数据模块中提供一个接口,比如Login.客户端显式调用.在Login中用FindWindow找到主窗体的句柄,发送wm_keydown消息.主窗体响应keydown,显示连接数
 
TO 楼主
您好,借你贴子用一下,刚注册.不能开贴.
关于QQ 发送信息的
为什么每篇同类的文章都说 'RICHEDIT'是发送文字的窗口,用SPY++查了总共有两个
'RICHEDIT',一个在'AfxWnd42'下.但两个都试了,没用.可能以前版本的可以,我用的这个是QQ2004 II
不行,试了一整天了.不能注入文字,但'RichEdit20A'(已发送的)这个却能在里面加字.
现求教,那个才是真正的发送文字的窗口。(200分,可商量)

我是这样写的:
WI:= 0;
WI := FindWindowEx(0,WI, '#32770',szText);
WI:= FindWindowEx(WI,0, '#32770','');
HWindow:= FindWindowEx(WI,0,'AfxWnd42',NIL);
HWindow := FindWindowEx(HWindow,0,'RICHEDIT',NIL);
SendMessage(HWindow, WM_SETTEXT, 256,integer(EDIT1.TEXT));

 
高小五说的应该有些问题
首先,多线程是完全可以访问主窗体的,只是有一个安全访问的问题要注意。
其次,客户端不连接前,是创建了Application和主Form的。
楼主的代码我没看出来问题。但是我现在采用的都是Neutral 线型,也有类似楼主的操作,目前没任何问题。
如果条件允许,你可以重新建立一个Application 来单独测试你这段代码。
 
用PostMessage,不要直接调用 VCL方法.
 
后退
顶部