文字的移动(100分)

  • 主题发起人 主题发起人 x3000
  • 开始时间 开始时间
X

x3000

Unregistered / Unconfirmed
GUEST, unregistred user!
在Canvas 中可以使用TextOut等方法写上文字,但当移动文字位置的时候,必须要
将以前的文字清除,再在新的位置写,线,矩形等可以用pmNotXor方法擦除,文字
用什么方法?

我的方法是用Canvas上背景颜色在原来位置写一遍,但这样原来文字下的图形也被清
除了,只能用repaint的方法恢复,造成屏幕闪烁。大家有什么好方法?

谢谢
 
不需要清除
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Canvas.Font.Size:=20;
Form1.Canvas.Font.Color:=clRed;
Form1.Canvas.TextOut(X,Y,'你好');
Inc(X);
Inc(Y);
end;
 
你的方法是对的。但第一次写时就是用“与或”的方法。



先保存要写区域的内容,要清除时把保存的内容画一下。
 
同意:先保存要写区域的内容,要清除时把保存的内容画一下。
WINDOWS中的文字输出无法使用XOR的方式,这是个老问题了。
 
我做了一个有你所说的那样 8-)
在窗体中放入Image Timer 这两个控件 在加入以下代码就可以了
呵呵 8-) 很简单吧!Image控件要你自己去调节它的长短哦!
作者:qbtxx
给 点 奖 励 分 吧 ! 呵呵
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;

type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
x,tt:integer;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
x:=x-1;
tt:=tt-1;
if x<-176 then
x:=image1.height+10;
tt:=x+10;
image1.Canvas.font.size:=16;
image1.Canvas.Font.Style:=[fsItalic];
image1.Canvas.Font.Color:=$00c080ff;
image1.Canvas.TextOut(10,x,'你');
image1.Canvas.Font.Color:=$00ff0080;
image1.Canvas.TextOut(10,x+20,'好');
image1.Canvas.Font.Color:=$00408080;
image1.Canvas.TextOut(10,x+40,'呀');
image1.Canvas.Font.Color:=$008080ff;
image1.Canvas.TextOut(10,x+60,'可');
image1.Canvas.Font.Color:=$00408000;
image1.Canvas.TextOut(10,x+80,'爱');
image1.Canvas.Font.Color:=$00400080;
image1.Canvas.TextOut(10,x+100,'的');
image1.Canvas.Font.Color:=$004080ff;
image1.Canvas.TextOut(10,x+120,'妹');
image1.Canvas.Font.Color:=$00c08000;
image1.Canvas.TextOut(10,x+140,'妹');
image1.Canvas.Font.Color:=ClPurple;
image1.Canvas.TextOut(10,x+160,'!');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.enabled:=true;
timer1.Interval:=10;
x:=image1.height+10;
tt:=x+10;
end;

end.
 
他们说的都不对!
实际上这些办法根本做不做电视上加字幕的效果!
每个文字都带着自己的背景色显示出来,把原来的背景图片破坏了!
我有办法做得象电视上的字幕一样
文字移动平滑不抖动
屏幕不闪
不破坏背景图片
想知道答案
请与it_boy69@sina.com联系
 
太简单了,查一个大量字幕的控件源代码吧,两个东东一个保存画字之前那块地方的图形,
2、将brush.style 设为bsclear,3、画字,4、将之前的图放回来
 
你先把Canvas整个内容画在一个Tbitmap上,再把Tbitmap贴在form上,
这样就不会闪烁,一般的图形系统都是这样做的
 
这个...不难吧? 用Double Buffer不就ok了?
 
后退
顶部