卷
卷起千堆雪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;
通常是利用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;