小问题,高手见笑了!(88分)

  • 主题发起人 delphiboy
  • 开始时间
D

delphiboy

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好!
我现在需要这样一种效果,如下表示:
在memo上让中文字一个字一个字地显示,例如,先出现“我”字,
然后停顿1秒钟再出现“爱”字,然后再停顿1秒中,出现“大”,
以次类推,出现“我爱大富翁”,等等,当中还需要#13来进行
换行(类似硬回车),当“我爱大富翁”五字显示后,停顿5秒后,
让这5个字全部往上拉(滚屏),然后再依次出现“我爱DELPHI”
字样(效果仍然要一字一字显示),请问这个效果如何实现?
 
使用 Ttimer控件,在其Ontimer事件中写代码.并改变Interval的值.



 
procedure TForm1.Button1Click(Sender: TObject);
var
I,j:integer;
tempCanvas:Tcanvas;
begin
TempCanvas:=TCanvas.Create;
TempCanvas.Handle:=Getdc(memo1.Handle);
for I:=0 to Memo1.lines.Count-1 do
begin
for J:=0 to length(Memo1.Lines.Strings)-1 do
begin
Memo2.lines.Add('');
Memo2.Lines.strings:=Copy(Memo1.lines.strings,0,j);
sleep(1000);
end;
memo2.scrollby(0,Tempcanvas.textheight(Memo1.lines.strings));
end;
TempCanvas.Free;
end;
 
hubdog的办法不错!
 
最好开个线称做这个,呵呵。加个application.processmessage?
 
to hubdog :请你能不能解释一下为啥用2个MEMO?我使用过了你的程序,
但是没有出现我需要的效果(一点效果都没有出现,而且还有死机现象)。
主要是sleep函数执行时是不处理消息的,所以出现有死机的假象

下面这个DALAY函数是DNCHEN写的,比较好一点。
procedure Delay(ms : longint);
var
TheTime : LongInt;
begin
TheTime := GetTickCount + ms;
while GetTickCount < TheTime do
Application.ProcessMessages;
end;

to cj:写这个程序还要开线程,太可怕了。
 
可能是你的机器太慢,我的没问题,当然你可以用dnchen的延时(更好)
我用2个memo只是为了举例说明问题,你可以改改,
另外,你要停顿5秒,再上升,可以
。。。。。
for J:=0 to length(Memo1.Lines.Strings)-1 do
begin
Memo2.lines.Add('');
Memo2.Lines.strings:=Copy(Memo1.lines.strings,0,j);
delay(1000);
end;
delay(5000);
for I:=0 to TempCanvas.TextHeight(Memo1.Lines.Strings));
begin
delay(30);
memo2.scrollby(0,1);
end;
........
 
sorry,改一下
。。。。
for I:=0 to TempCanvas.TextHeight(Memo1.Lines.Strings)-1);
。。。。
 
唉?????
这种问题,用 delphi 解决。还使用 flash 把及快速又漂亮。还可以输出*。AVI
等格式 。如需要 如需要 email :meng_1226@tjmial.com
 
接受答案了.
 
顶部