uses unit2
var f:=Tform2
procedure TForm1.BtConnetClick(Sender: TObject);
begin
//Application.CreateForm(TForm2, Form2);
f := TForm2.Create(nil);
f.Caption := '正在连接远程主机' + ClientSocket1.Address + '......';
f.DoConnect(edit1.Text ,3000);{一个自定义的连接服务端的函数}
f.show;
end;上面的代码可以多次显示form2; 与多个服务端建立连接
但是 只有一个服务端的时候连接正常,两个服务端则服务端传递回来的数据就错了!!?
你试试用别的方法,例如把声明窗体变量写在过程里试试。
就是这样
procedure TForm1.BtConnetClick(Sender: TObject);
var
f:=Tform2;
begin
//Application.CreateForm(TForm2, Form2);
f := TForm2.Create(nil);
f.Caption := '正在连接远程主机' + ClientSocket1.Address + '......';
f.DoConnect(edit1.Text ,3000);{一个自定义的连接服务端的函数}
f.show;
end;
这一句应该就有问题吧至少 应该是 var f : Tform2
但是看你这个应该是个全局变量,但是你确在click事件里面创建了两次,,所以出错了。。可以要创建多个实例,就要定义 相应的实例才是。可以试试在
procedure TForm1.BtConnetClick(Sender: TObject);
var
f : TForm2;
begin
所以不正确. 我上面的方法在不进行socket接收数据的时候,一起功能正常
但是接受数据后,就会发生,Tform2中的sochet组件接受数据混乱!? 再次请教! 谢谢
如果用线程的话,我是否需要在线程中创建 客户端控件
uses unit2
var f:=Tform2
procedure TForm1.BtConnetClick(Sender: TObject);
begin
if f = nil then
beign
f := TForm2.Create(nil);
end;
f.Caption := '正在连接远程主机' + ClientSocket1.Address + '......';
f.DoConnect(edit1.Text ,3000);{一个自定义的连接服务端的函数}
f.show;
end;