Delphi奇怪的现象!!!(50)

qianying 2002-05-14 08:10:36
我写了一个TidTcpClient的程序,用来和服务器进行通讯,
点击按钮建立连接后,程序应会进入死循环,并不断将服务器端发来的消息打印在
RICHEDIT控件上。程序如下:
但是这么写,界面上没有任何东西被打印。

procedure TMain.BitBtn1Click(Sender: TObject);
Var
strData:string;
begin
DataModule_MainModule := TDataModule_MainModule.Create(main);
DataModule_MainModule.IdTCPClient_SMSAS.Host:='192.168.0.204';
DataModule_MainModule.IdTCPClient_SMSAS.Port:=8889;

while true do
begin
strData := DataModule_MainModule.IdTCPClient_SMSAS.ReadString(100);
if strData <> '' then
begin
RichEdit_message_filter.Lines.Append(strData);
end;
end;

end;

但是当我将WHILE语句去掉,只保留循环体,程序却能有正确的输出(只不过只能输出一次数据),程序如下:

procedure TMain.BitBtn1Click(Sender: TObject);
Var
strData:string;
begin
DataModule_MainModule := TDataModule_MainModule.Create(main);
DataModule_MainModule.IdTCPClient_SMSAS.Host:='192.168.0.204';
DataModule_MainModule.IdTCPClient_SMSAS.Port:=8889;

//while true do
//begin
strData := DataModule_MainModule.IdTCPClient_SMSAS.ReadString(100);
if strData <> '' then
begin
RichEdit_message_filter.Lines.Append(strData);
end;
//end;

end;

请问高手,此是何道理??
(另,我换成REPEAT语句也不成功)
...全文
25 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianying 2002-05-16
  • 打赏
  • 举报
回复
我已经知道了,在改变RICHEDIT控件内容之前后,要加上
RichEdit_message_filter.Lines.BeginUpdate;
RichEdit_message_filter.Lines.EndUpdate;


begin
strData := DataModule_MainModule.IdTCPClient_SMSAS.ReadString(100);
if strData < > '' then
begin
RichEdit_message_filter.BeginUpdate;
RichEdit_message_filter.Lines.Append(strData);
RichEdit_message_filter.Lines.EndUpdate;
end;
end;

二位的方法我没有试,以后我会试一试的,谢谢。
NightCloud 2002-05-14
  • 打赏
  • 举报
回复
while true do
begin
strData := DataModule_MainModule.IdTCPClient_SMSAS.ReadString(100);
if strData <> '' then
begin
RichEdit_message_filter.Lines.Append(strData);

application.processmessages; //加上这句看看
end;
end;
dolphin2001 2002-05-14
  • 打赏
  • 举报
回复

while true do
begin
strData := DataModule_MainModule.IdTCPClient_SMSAS.ReadString(100);
if strData <> '' then
begin
RichEdit_message_filter.Lines.Append(strData);
end;
Application.Processmessages //加入这么一句,你试试!
end;
我以前做过一个简单的程序,就是定义一个整形(i),过程是让循环10000次累加1,每次累加都用一个Label来显示,如果不加我加的那句就不能同步显示(就是每次加1,都显示一次),后来看书上要加入这么一句就可以了,你试试,呵呵。
qianying 2002-05-14
  • 打赏
  • 举报
回复
TO sundayboys(sunboy):
刚试过,不行。
sundayboys 2002-05-14
  • 打赏
  • 举报
回复
是不是将
strData := DataModule_MainModule.IdTCPClient_SMSAS.ReadString(100);
if strData <> '' then
begin
RichEdit_message_filter.Lines.Append(strData);
end;
这段代码,放到TIdTCPClient的ONWork事件中,判断TWorkMode是否为wmRead模式。

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧