轻
轻舞肥羊
Unregistered / Unconfirmed
GUEST, unregistred user!
闲着无聊,想写一个类似2000/xp启动时载入个人设置窗口中间的渐变条
开始用定时器不停的Draw,发现效率让人不能忍受,于是先Draw一个重复的渐变条
保存到源Image,然后用CopyRect复制到目标Image上,快多了
现在出现,如果源Image不可见的话,CopyRect复制出来的是空的,就算可见,
在运行时改变源Image的大小也是空的..郁闷
问题是,怎么Draw一个图到一个不可见的Canvas对象上,并能复制出来
代码:
//DrawRect是我写的一个过程,画渐变色,没有问题的
//窗体的OnCreate事件中调用DrawSourceImage过程画源图像
procedure TForm1.DrawSourceImage;
var
i : Integer;
const
CFrom = $33FFFF;
CTo = $FF6699;
W = 1;
begin
for i := 0 to img.Width div RectWidth + 2 do
if i div 2 = i / 2 then
DrawRect(
imgSource.Canvas,
Rect(RectWidth * i + FPos,0,RectWidth * (i + 1) +FPos,img.Height),
CFrom,
CTo,
img.Width div w)
else
DrawRect(
imgSource.Canvas,
Rect(RectWidth * i + FPos,0,RectWidth * (i + 1) +FPos,img.Height),
CTo,
CFrom,
img.Width div w);
end;
//一个Timer会定时调用下面的过程
procedure TForm1.DrawImage;
begin
dec(FPos);
if FPos < 0 then FPos := RectWidth * 2;
img.Canvas.CopyRect(
Rect(0,0,img.Width,img.Height),
imgSource.Canvas, //如果imgSource不可见,就复制不到图像
Rect(FPos,0,img.Width+FPos,img.Height));
end;
开始用定时器不停的Draw,发现效率让人不能忍受,于是先Draw一个重复的渐变条
保存到源Image,然后用CopyRect复制到目标Image上,快多了
现在出现,如果源Image不可见的话,CopyRect复制出来的是空的,就算可见,
在运行时改变源Image的大小也是空的..郁闷
问题是,怎么Draw一个图到一个不可见的Canvas对象上,并能复制出来
代码:
//DrawRect是我写的一个过程,画渐变色,没有问题的
//窗体的OnCreate事件中调用DrawSourceImage过程画源图像
procedure TForm1.DrawSourceImage;
var
i : Integer;
const
CFrom = $33FFFF;
CTo = $FF6699;
W = 1;
begin
for i := 0 to img.Width div RectWidth + 2 do
if i div 2 = i / 2 then
DrawRect(
imgSource.Canvas,
Rect(RectWidth * i + FPos,0,RectWidth * (i + 1) +FPos,img.Height),
CFrom,
CTo,
img.Width div w)
else
DrawRect(
imgSource.Canvas,
Rect(RectWidth * i + FPos,0,RectWidth * (i + 1) +FPos,img.Height),
CTo,
CFrom,
img.Width div w);
end;
//一个Timer会定时调用下面的过程
procedure TForm1.DrawImage;
begin
dec(FPos);
if FPos < 0 then FPos := RectWidth * 2;
img.Canvas.CopyRect(
Rect(0,0,img.Width,img.Height),
imgSource.Canvas, //如果imgSource不可见,就复制不到图像
Rect(FPos,0,img.Width+FPos,img.Height));
end;