我之前并没有真正使用过图形,但我需要设计一个动画的屏幕保护程序,即。在屏幕上移动公司徽标,从侧面反弹。
到目前为止,使用GDIPLUS,我执行以下操作......
Image1: IGPImage;
Image2: IGPImage;
Image1 := TGPImage.Create('background.png');
Image2 := TGPImage.Create('logo.png');
并在OnPaint
的{{1}}事件中按如下方式绘制。 TPaintBox
组件将事件提供给TTimer
Invalidate
。
TPaintBox
然而,结果并不完全令人满意,因为徽标闪烁了一点,屏幕上的移动procedure TFormMain.PaintBox1Paint(Sender: TObject);
var
GPGraphics: IGPGraphics;
i: integer;
begin
GPGraphics := TGPGraphics.Create(PaintBox1.Canvas.Handle);
//Restore the background
GPGraphics.DrawImage(Image1, 0, 0);
// Determine the next position of the logo
// We will also determine here if we are at the edges (not shown)
X := X + 1;
Y := Y + 1;
// Draw the logo somewhere on the screen
GPGraphics.DrawImage(Image2, X, Y);
end;
永远需要到达任何一侧。我不知道如何加快速度,同时保持徽标在屏幕上的平滑过渡。
我很感激我能得到的任何帮助。我目前在Windows XP上使用Delphi XE。
问候,彼得
答案 0 :(得分:0)
我知道这是一个老问题,但是它应该得到答案。
与其他许多图形系统一样,为避免GDI +闪烁,您需要将完整的图像放到屏幕上。
在您的情况下,这意味着您必须创建一个具有屏幕大小的位图,为该位图绘制背景,然后为该位图绘制所需的任何图像,最后在屏幕上绘制该位图。这根本不会轻弹。
当然,位图只需创建一次即可随意重用。 OnPaint将绘制该位图。在其他地方,您的计时器例程将绘制到位图中,然后使窗口无效,这又将触发OnPaint事件。