又有300分了,领分吧~~~(现在可是散分,都没人要?????) (300分)

  • 主题发起人 主题发起人 轻舞肥羊
  • 开始时间 开始时间

轻舞肥羊

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;
 
肥羊兄,又放分啊?

用一个TBitmap对象保存你的源Image没有一点问题的。
 
TO 楼上的:
是先Draw到Image中再保存到TBitMap中还是直接建立TBitmap对象再往里面画呢?
后者已经试过,不行,也许我的方法不对吧,还请指教
 
当然是直接建立TBitmap对象在它上面画啊,我的N个控件都是先在一个TBitmap上画好,再复制到屏幕上的,你会不会是没有指定Bitmap的大小啊,应该不会吧?
 
TO 楼上的:
300分啊,真的很多,我眼红啊
 
搞定了,不好意思,图像编程不熟悉..低级错误也
不明白的是,为什么Image不可见的话,往它的Canvas上画东西不能Copy出来?能不能解释?
就算可见,在Create时修改它的Size也不会画出来,而且是修改Size后才Draw的,这样也不行?
 
建立内存DC的方法很普通,有什么难的

CreateCompatibleBitmap
CreateCompatibleDC

 
你用的是TImage控件吧?TImage控件在不可见的时候根本就不会画的,它的图像保存在Picture属性(一个TPicture类)中,所以你用TImage.Canvas是取不出图像来的,而用它的Picture属性的Canvas就可以了,如果这样,还不如直接用一个TBitmap对象呢。[:)]
 
我靠,同样的代码,imgSource.Visible := False;在公司画不出来,在家可以画出来!!!
同样是DELPHI 7
不过家里的DELPHI 7 感觉是与公司的不同
公司里操作系统是2000,家里是windows server 2003
同样的一个程序,主菜单在编译出来就不一样,家里的有XP效果,公司的没有...

怎么回事???晕死...
 
在2000下编译想有XP效果?不太可能吧?除非你用特定的控件。

不好意思,我还是用98的,2003还没有见识过呢。
 
建立一个缓冲DC

With Tbitmap.create do
try
Canvas.draw(); //这里随便你画
fianlly
free;
end;
 
To thx1180:
Delphi 7的菜单在2000下的效果是什么?都是它自画的,与系统无关
我的电脑从来不用什么Theme主题,我说的效果是Delphi 7菜单自己画出来的效果.
98用Delphi开发是不是很惨?动不动就得重启~~

to 爱元元的哥哥:
谢谢,问题已经解决了

先去吃饭,饿得不行了....等会散分

要分的留言呀~~~~~嘿嘿
 
是这样啊?学习。

在98下用Delphi开发还好啊,代码中少留点Bug就行了,哪里有那么多的重启哟。

呵呵,我也吃饭去了。
 
Timage再不可见时是可以画的,关键是不可见的image必须自己初始化。
运行下面的代码就明白了
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Picture.LoadFromFile('c:/test.bmp');
canvas.CopyRect(image1.ClientRect,image1.Picture.bitmap.Canvas,image1.ClientRect);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
image1.Picture.Bitmap.Canvas.Rectangle(1,1,100,100);
canvas.CopyRect(image1.ClientRect,image1.Picture.bitmap.Canvas,image1.ClientRect);

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
image1.Picture.Bitmap.Width:=200;
image1.Picture.Bitmap.Height:=300;
button2.click;
end;
 
不是吧,我的机子不慢啊,呵呵,是不是偶的机子好啊,[:D]
 
打雷啦,下雨收衣服啦~~~~~
 

Similar threads

后退
顶部