这一段delphi代码是什么缺陷?

来源:百度知道 编辑:UC知道 时间:2024/05/22 09:46:10
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
sl: TStringList;
ws: WideString;
begin
sl:=TStringList.Create;
sl.LoadFromFile('h:文档1.txt');
ws := sl.Text;
sl.Free;

for i:=1 to Length(ws) do
ShowMessage(ws[i]);
// label1.Caption:=ws[i];
end;
以上语句的最后两句:不断点击ShowMessage对话框可逐个显示文档1.TXT中的汉字,直至完毕。可label1.Caption:=ws[i];为什么就不能显示呢?
希望高手做出这样的功能:通过TIMER组件,每隔一秒能让label在窗体逐个显示
文本文件中的汉字。
感谢二位!菜鸟还想向“阳光上的桥”大师请教一个附带问题:在文件的字符输出期间无法关闭窗体,必须等全部输出完毕才能关闭。这是为什么,咋办?

定义两个全局变量
pbch:WideString;
pbi:integer;
增加一个按钮,添加事件
procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStringList;
begin
sl:=TStringList.Create;
sl.LoadFromFile('h:\文档1.txt');
pbch:= sl.Text;
sl.Free;
pbi:=1;
timer1.Enabled:=True;
end;
先把timer1.enabled设为False;
procedure TForm1.Timer1Timer(Sender: TObject);

begin
label1.Caption:=pbch[pbi];
inc(pbi);
if pbi>length(pbch) then
timer1.Enabled:=False;
end;

memo1.lines.add(ws[i]);

首先,你的for语句的do后面没有begin和end,那么for循环只执行了一个语句,也就是只是在ShowMessage,没有更新lablel1。

其次,窗体内容更新之后,需要调用Application.ProcessMessages,否则更新的内容只有在你的字程序执行完毕之后才体现出来,要每一秒显示一行的程序代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=1 to Length(ws) do
begin
label1.Caption := ws[i];
Application.ProcessMessages;
sleep(1000);
end;
end