var
Back, bitmap, Buf : TBitMap; // фон, картинка, буфер
BackRct : TRect; // область фона, которая должна быть
// восстановлена из буфера
BufRet: Trect; // область буфера, которая используется для
// восстановления фона
х,у:integer; // текущее положение картинки
W,H: integer; // размеры картинки
procedure TForm1.FormActivate(Sender: TObject);
begin
// создать три объекта — битовых образа
Back := TBitmap.Create; // фон
bitmap := TBitmap.Create; // картинка
Buf := TBitmap.Create; // буфер
// загрузить и вывести фон
Back.LoadFromFile('factory.bmp');
Form1.Image1.canvas.Draw(0,0,Back);
// загрузить картинку, которая будет двигаться
bitmap.LoadFromFile('aplane.bmp');
// определим "прозрачный" цвет
bitmap.Transparent := True;
bitmap.TransParentColor := bitmap.canvas.pixels[1,1];
// создать буфер для сохранения копии области фона,
// на которую накладывается картинка
W:= bitmap.Width;
Н:= bitmap.Height;
Buf.Width:= W;
Buf.Height:=H;
Buf.Palette:=Back.Palette;
// Чтобы обеспечить соответствие палитр //
Buf.Canvas.CopyMode:=cmSrcCopy;
// определим область буфера, которая
// будет использоваться
// для восстановления фона
BufRct:=Bounds(0,0,W,H);
// начальное положение картинки
х := -W; у := 20;
// определим сохраняемую область фона
BackRct:=Bounds(x,y,W,H); // и сохраним ее
Buf.Canvas.CopyRect(BufRet,Back.Canvas,BackRct);
end;
// обработка сигнала таймера
procedure TForm1.Timer1Timer(Sender: TObject);
begin
// восстановлением фона (из буфера) удалим рисунок
Forml.image1.canvas.Draw(x,у,Buf);
x:=x+2;
if x>fоrm1.Image1.Width then x:=-W;
// определим сохраняемую область фона
BackRct:=Bounds(x,у,W,H);
// сохраним ее копию
Buf.Canvas.CopyRect(BufRct,Back.Canvas,BackRct);
// выведем рисунок
Forml.image1.canvas.Draw(x,y,bitmap);
end;
// завершение работы программы
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// освободим память, выделенную
// для хранения битовых образов
Back.Free;
bitmap.Free;
Buf.Free;
end;
Как избавиться от мерцания TImage?
Использую компонент TImage для отображения нескольких примитивов, которые постоянно перемещаются. При этом TImage полностью перерисовывается, что вызывает его мерцание, это довольно сильно ухудшает привлекательность моей программы. Как избавиться от мерцания?
Используй битовые образы.
Код:
procedure TForm1.FormCreate(Sender: TObject)
type DBProp = class (TWinControl)
public
property DoubleBuffered;
end;
begin
DBProp(Image1).DoubleBuffered:=true;
end;
type DBProp = class (TWinControl)
public
property DoubleBuffered;
end;
begin
DBProp(Image1).DoubleBuffered:=true;
end;
тоже помогает!!
Код:
Image1.ControlStyle:=Image1.ControlStyle + [ csOpaque ];
это поможет рисовать без мерцания...
У меня Дельфи 6.
Цитата: 77713
Попробуй так:
это поможет рисовать без мерцания...
Код:
Image1.ControlStyle:=Image1.ControlStyle + [ csOpaque ];
это поможет рисовать без мерцания...
Этот вариант у меня не проходит :(
Подскажите: на чем можно рисовать, чтобы не мерцало, чтобы при рисовании перерисовывалась не вся картинка, а только та часть, где я рисую?