Здравствуйте !
Хочу освоить Двойную буферизацию, но что то не получаеться,
не могу понять в чем проблема.
Ниже представлен код программы, подскажите где ошибка ?
Код:
....
var
Form1: TForm1;
sam, buf:TBitmap;
BufRct: TRect;
x, y, TW: Integer;
w, h: Integer;
s: String;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
s:= 'Это большой пример для маленькой компании.';
sam:= TBitmap.Create;
buf:= TBitmap.Create;
sam.Width:= ClientWidth;
sam.Height:= (ClientHeight - sam.Canvas.TextHeight(s)) div 2;
w:= sam.Width;
h:= sam.Height;
buf.Width:= w;
buf.Height:=h;
x:= ClientWidth;
y:= 0;
X := X - 100;
sam.Canvas.Font.Color:= clRed;
sam.Canvas.Font.Name := 'Georgia';
sam.Canvas.Font.Size := 15;
sam.Canvas.Font.Style:= [fsBold];
sam.Transparent:= True;
TW := sam.Canvas.TextWidth(s);
sam.Canvas.TextOut(x,y,s);
BufRct := Bounds(round(x + sin(1)), y, w, h);
Buf.Canvas.CopyRect(Buf.Canvas.ClipRect,Form1.Canvas,BufRct);
Form1.Canvas.Draw(0,20,sam);
Timer1.Enabled:= True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Canvas.Draw(0,20,sam);
X := X - 1;
If X <= -TW then
X := ClientWidth;
BufRct := Bounds(x + 1, y, w, h);
Buf.Canvas.CopyRect(Buf.Canvas.ClipRect,Form1.Canvas,BufRct);
sam.Canvas.TextOut(x,y,s);
Form1.Canvas.Draw(0,20,sam);
end;
end.
Программа выводит бегущую строку на форму, при
sam.Transparent:= True
она размазана, при
sam.Transparent:= False идет нормально.
Конечно можно подобрать цвет
sam.Canvas.Brush.Color:= clBtnFace , но
это на простом фоне, а если сложный фон (картинка).Подскажите где ошибка и
как ее исправить.