如何在From上绘出空心字?(100分)

  • 主题发起人 主题发起人 silicon
  • 开始时间 开始时间
S

silicon

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在From上绘出空心字?或者说是描边字,就是字的边是一种颜色,内部用另一种色来
显示。
 
用控件吧!
 
这样来!

procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.Font.Name := 'Times New Roman';
Canvas.Font.size := 36;
Canvas.Font.style := [fsItalic,fsBold];
Canvas.Pen.Color := clGreen;
SetBkMode( Canvas.Handle, TRANSPARENT );
Canvas.TextOut(20,40,'I love delphi');
beginpath(canvas.handle);
Canvas.TextOut(20,40,'I love delphi');
endpath(canvas.handle);
Canvas.Pen.Color := clred;
StrokePath(canvas.handle);
end;
 
To!卷起千堆雪tyn,
你真是快呀!
 
哦,那偶以后就慢点。
 
呵呵!再生一问。
如果象MTV字幕那样,每个字从左向右慢慢地变色呢?

不过怎么样,这题分全给你了!
谁回答新的问题再给100分!
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
S,SS :String;
Len,i :Integer;
begin
S :='I love delphi';
SS :='';
Len :=Length(S);
Canvas.Font.Name := 'Times New Roman';
Canvas.Font.size := 36;
Canvas.Font.style := [fsItalic,fsBold];
Canvas.Font.Color :=RGB(Random(255),Random(255),Random(255));
for i:=1 to Len do
begin
SetBkMode( Canvas.Handle, TRANSPARENT );
Canvas.TextOut(20,40,SS+S);
SS :=SS+S;
Sleep(100);
end;
end;
 
老兄!这个方法不是我要的那种呀!
你一点就画出一个字,我要的是每个字都从左右向右填充方式来的。
就象唱歌那样,每个字会有那么长的时间的。我要在这么长的时间里让一个字从左到右变色。
 
从左向右慢慢地变色?
放一个Timer控件试试:

procedure TForm1.Timer1Timer(Sender: TObject);
var NowStep,w,x0,y0:integer;
OutString:string;
begin
x0:=10;
y0:=10;
OutString:='老猫来试试?';
if NowStep=0
then begin
Canvas.Brush.Style:=bsClear;
Canvas.Font.Color:=clBlack;
Canvas.TextOut(x0,y0,OutString);
end
else begin
Canvas.Brush.Style:=bsClear;
Canvas.Font.Color:=clRed;
w:=Canvas.TextWidth(OutString);
Canvas.TextRect(
Rect(x0,y0,x0+w*NowStep div 40,
y0+Canvas.TextHeight(OutString)),
x0,y0,OutString);
end;
inc(NowStep);
if Nowstep>40 then NowStep:=0;
end;
 
学习~

to wjiachun:老猫 不变呀~ 怎么回事?
 
对了,请把NowStep 设置为全局变量
 
To:wjiachun,
变是变了,但是次的距离太多,如果我想一个象素地变就不行了!
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
Bmp :TBitmap;
S :String;
i :Integer;
begin
S :='卷起千堆雪';
Bmp :=TBitmap.Create;
Bmp.Width :=Width;
Bmp.Height :=Form1.Height;
Bmp.Canvas.Brush.Color :=clBtnFace;
Bmp.Canvas.Rectangle(0,0,Bmp.Width,Bmp.Height);
SetBKMode(Bmp.Canvas.Handle,TRANSPARENT);
Bmp.Canvas.Font.Size :=72;
Bmp.Canvas.Font.Color :=RGB(Random(255),Random(255),Random(255));
Bmp.Canvas.TextOut(0,0,S);
for i :=0 to Bmp.Width-1 do
Canvas.CopyRect(Rect(0,0,i,Bmp.Height),Bmp.Canvas,Rect(0,0,i,Bmp.Height));
Bmp.Free;
end;
 
嘿嘿,你自己试试改改数据嘛。
 
希望还能用其他更好的办法实现。如果谁有更好的方法!我再另开贴给分!
 
呵,你还不如跟我要源代码?qq:788656
 
后退
顶部