![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Здравствуйте !
Хочу освоить Двойную буферизацию, но что то не получаеться, не могу понять в чем проблема. Ниже представлен код программы, подскажите где ошибка ? Код:
.... 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 , но это на простом фоне, а если сложный фон (картинка).Подскажите где ошибка и как ее исправить. |