返璞归真4:实现类似MTV歌词颜色渐进显现的新思路!(1分)

  • 主题发起人 主题发起人 卷起千堆雪tyn
  • 开始时间 开始时间

卷起千堆雪tyn

Unregistered / Unconfirmed
GUEST, unregistred user!
今天回答了silicon朋友的一个帖子,想到一种实现类似MTV歌词颜色渐进显现的思路。
通常是利用TextRect这种形式来实现的;
现在我们可以以窗体颜色为背景色建立一幅位图,利用CopyRect画上去。

procedure TForm1.Timer1Timer(Sender: TObject);
var
Bmp :TBitmap;
S :String;
i,Wid,Len :Integer;
begin
S :='卷起千堆雪';
Bmp :=TBitmap.Create;
SetBKMode(Bmp.Canvas.Handle,TRANSPARENT); //设置背景透明
Bmp.Canvas.Font.Size :=72;
Bmp.Canvas.Font.Color :=RGB(Random(255),Random(255),Random(255));
Wid :=Canvas.TextWidth(S)*9; //默认的字体大小是8
Len :=Canvas.TextHeight(S)*9;
Bmp.Width :=Wid;
Bmp.Height :=Len;
Bmp.Canvas.Brush.Color :=clBtnFace; //设置BMP的背景为FORM窗体的颜色
Bmp.Canvas.Rectangle(0,0,Bmp.Width,Bmp.Height);
Bmp.Canvas.TextOut(0,0,S);
for i :=0 to Wid-1 do
begin
//将BMP逐块绘制在Form的画布上
Canvas.CopyRect(Rect(0,0,i,Bmp.Height-1),Bmp.Canvas,Rect(1,0,i,Bmp.Height-1));
Sleep(10); //延时,以便形成明显的动画效果
end;
Bmp.Free;
end;
 
好!系列4终于出来了,坚持下去吆。[:)]
 
只要地球还在转动,千堆雪就会不断的返璞归真。
 
To 卷起千堆雪:
你上面的代码中加了 Sleep(10) 一句才出现了明显的动画效果,
然而就是因为这一句,使窗口的所有操作都暂时失效,包括移动、改变大小、关闭等,
只有在不Sleep的时候才行,那怕Sleep(0.00000000000000000000000000000001),结果都一样。
 
楼上的朋友,其实不加Sleep也可以实现明显的渐进效果,只要你增大Bmp的宽度和高度就可以了;
不信你试试看,设定 Bmp.Width :=Form1.Width,Bmp.Height :=Form1.Height ;

^_^

至于不能拖动之类的操作,你自己建立多线程不就是了么;我只是抛砖,引玉的事你来做啊。
 
上传了一个比卷起千堆雪tyn方法简单的演示程序(我光盘里的):
WWW.PLAYICQ.COM
希望能给大家一点启发。
 
^_^

那个例子是用的TextRect,我是换了种思路;
集思广益么。
 
请问Wid :=Canvas.TextWidth(S)*9; //默认的字体大小是8
Len :=Canvas.TextHeight(S)*9;
*9这是为什么啊,小弟不知,请各位大虾指点,
 
设定的字体大小 :Bmp.Canvas.Font.Size :=72;
默认的字体大小是8
 
真想不到一个问题这么快就解决了,真是感谢 卷起千堆雪tyn 在你的每篇文章中,
收获不少希望以后多多出来新的文章,呵呵,你真棒,向各位学习,还有

delphibbs very very very good ,
 
我没有看清问题,你的方法不用画重复部份,效率应当高一些,比TEXTRECT的方法要正规一些。
 
用alphaBend,轻松搞定!
 
多人接受答案了。
 
后退
顶部