使用 Indy 控件中的 tidtcpserver ,主窗体中 放置 TPageControl控件,当客户端连接时发生“窗口句柄无效”的错误 ( 积分: 100

  • 主题发起人 主题发起人 草原牧歌
  • 开始时间 开始时间

草原牧歌

Unregistered / Unconfirmed
GUEST, unregistred user!
使用 Indy 控件中的 tidtcpserver ,主窗体中 放置 TPageControl控件,当客户端连接时发生“窗口句柄无效”的错误 ( 积分: 100 )<br />PageControl 创建数个 TTabSheet,每个TabControl中放一个控件.
比如TListView 在第一个 TTabsheet里,tcombobox 控件放在第二个 TTabsheet里
在 IdTCPServer1Connect(AThread: TIdPeerThread);事件里把客户端的信息分别加入到 TListView 和 TComboBox 里。 这时运行 客户端的程序 ,在客户端使用
TForm1.Button1Click(Sender: TObject);
begin
IdTcpClient.connect;
end;
来进行连接,即不Disconnect;
在服务器中运行了 TIDTcpserver.execute 事件
Athread.connection.readln;
问题就是,如果没有 TPageControl控件的话,什么问题也没有,只有有了TPageControl控件,并且TPageControl控件中有数个 TTabSheet ,在数个 TTabSheet中的 控件 如果有在
IdTCPServer1Connect(AThread: TIdPeerThread);
这个事件中出现的话,就会有 “无效的窗口句柄”错误提示!
以上的问题请各位朋友解答
 
PageControl 创建数个 TTabSheet,每个TabControl中放一个控件.
比如TListView 在第一个 TTabsheet里,tcombobox 控件放在第二个 TTabsheet里
在 IdTCPServer1Connect(AThread: TIdPeerThread);事件里把客户端的信息分别加入到 TListView 和 TComboBox 里。 这时运行 客户端的程序 ,在客户端使用
TForm1.Button1Click(Sender: TObject);
begin
IdTcpClient.connect;
end;
来进行连接,即不Disconnect;
在服务器中运行了 TIDTcpserver.execute 事件
Athread.connection.readln;
问题就是,如果没有 TPageControl控件的话,什么问题也没有,只有有了TPageControl控件,并且TPageControl控件中有数个 TTabSheet ,在数个 TTabSheet中的 控件 如果有在
IdTCPServer1Connect(AThread: TIdPeerThread);
这个事件中出现的话,就会有 “无效的窗口句柄”错误提示!
以上的问题请各位朋友解答
 
今天使用了D6中的TSERVERSOCKET 和 TClientSocket 控件作了差不多的程序,运行的很好!Indy好象真的不行,他似乎和某些VCL控件有冲突!
不信的话,可以自己试试!
在主窗体上放置 TPageControl; 加上几个 TTabSheet, 在两个以上的TTabSheet里放置 Tcombobox ;
在下面的事件中对 Tcombobox 操作。
IdTCPServer1Connect(AThread: TIdPeerThread);
begin
with AThread.connection.banding do
begin
ComboBox1.Items.add( Inttostr(PreePort)+PreeIp);
Combobox2.Items.add(Inttostr(PreePort)+PreeIP);
with ListView do
begin
ListItem := Items.Add;
ListItem.caption := Inttostr(Preeport);
listitem.subitem.add(preeIP);
listitem.subitem.add('TCP/IP');
end;
end;
end;
(有些属性可能写错了,只能记了一点点,如preeIP就有可能不对,要不就是Preehost?)
 
在多线程的程序中访问VCL控件,最好使用发送消息的方式postmessage or sendmessage
 
后退
顶部