关于移动字幕的编程(100分)

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

xman

Unregistered / Unconfirmed
GUEST, unregistred user!
在作帮助文件时,需要让字幕移动,采用timer控件
和form.canvas.textout配合使用,屏幕抖动很厉害,不知有什么办法解决,
thanx!
 
什么意思,是让帮助文件内容自己滚动吗?
 
我的意思是让一段文字在屏幕上的某一个区域平滑的循环移动,使读者
不用翻页就能看到整篇文章!在此申明一点,最好不是使用控件实现。
 
你可以使用双缓冲的方式,先将文本输出到一个buffercanvas上,
等文本全部输出后再一次性的copyrect到form。canvas上。
注意要截住WM_EraseBkgGnd的消息,返回值1;
我原来在编一个作图软件时用这种方法消除闪烁,效果不错。
 
放在panel上效果不错
 
我编了一个小程序实现你要的功能。很简单,
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormPaint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND;

{ Public declarations }
end;

var
Form1: TForm1;
i : Integer;
implementation

{$R *.DFM}

procedure TForm1.FormPaint(Sender: TObject);
var
bmp :TBitmap;
bufferCanvas: TCanvas;
ARect :TRect;
begin
ARect:=Rect(0,0,width,height);
bmp:=TBitmap.Create;
bmp.Width:=width;
bmp.Height:=height;
bmp.Canvas.TextOut(0,i,'Hello world');
bmp.Canvas.TextOut(0,i+20,'Welcome to Tsinghua BBS');
Form1.Canvas.CopyRect(ARect,Bmp.Canvas,ARect);
bmp.Destroy;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if i >500 then i:=0;
inc(i);
refresh;
end;

procedure TForm1.WMEraseBkgnd(var Message: TMessage);
begin
Message.Result := 1;
end;


end.
 
有现成的,用lmd 4 lmd ext中的 TLMDScrollText
 
Menxin:
人家不是说了不要控件嘛。
不过倒是可以参考一下控件的原代码。
 
sorry.没注意。
 
to xman:
该给分了吧 。xixi.
 
请快结束此问题.
 
呵呵!
看来又要又一个e-book诞生乐哦!
现在做这东西的人真多!
我认识的就有十几个在编乐,有的用VB有的用Delphi
 
接受答案了.
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部