我做了一个播放进度显示,进度条Alige:=alClient,进度条上面有一个可移动的25*9的小图片
每秒刷新一回这个新图片。我现在的写法是
src := rect(0,0,6,29);
dest := rect(0,0,Image1.Width,29);
Image1.canvas.copyrect(dest, Image_Skin.canvas, src);//底下进度条背景src := rect(0,0,6,29);
dest := rect(12,0,20,29);//这里本来用是代码计算
Image1.canvas.copyrect(dest, Image_Skin.canvas, src);//可移动的25*9的小图片
这样就组成一个图,问题是,改变窗体大小的,小图片成比例缩放我不想让图片随窗体的大小自动缩收,要怎么实现?
要怎么修改才好???
我写了一个例子,改变一下窗体的宽看看,在点按钮2看看,还是缩收状态
例子下载地址:www.cocowo.com/down/123.rar
每秒刷新一回这个新图片。我现在的写法是
src := rect(0,0,6,29);
dest := rect(0,0,Image1.Width,29);
Image1.canvas.copyrect(dest, Image_Skin.canvas, src);//底下进度条背景src := rect(0,0,6,29);
dest := rect(12,0,20,29);//这里本来用是代码计算
Image1.canvas.copyrect(dest, Image_Skin.canvas, src);//可移动的25*9的小图片
这样就组成一个图,问题是,改变窗体大小的,小图片成比例缩放我不想让图片随窗体的大小自动缩收,要怎么实现?
要怎么修改才好???
我写了一个例子,改变一下窗体的宽看看,在点按钮2看看,还是缩收状态
例子下载地址:www.cocowo.com/down/123.rar
解决方案 »
- 多个窗口切换的问题。
- 如何向MIDAS服务器上传文件
- 条形码读取问题???
- ado query 参数的问题
- TO hujinger(克沙)
- 公开了机房管理系统的客户端源代码,有需要的请到http://hedaofeng.jahee.com/
- xp操作系统-资源管理器 选文件的透明拉框,如何做出来呀
- 高分求源代码!又谁做过票据打印的软件!帮忙给点源代码!
- 300分求助!!!我同时打开20个adoquery,结果win2000报错虚内存不够:(只好另想办法了
- 急!求installshield for D5的PSW?
- FastReport3中,我做好了出库单报表(主从式),由于明细数据比较少,客户要求每页A4纸要打印相同的2份,怎么办?
- 如何判断查询空值?
然后用我这段代码
procedure TForm1.Button1Click(Sender: TObject);
var
dest, src : trect;
mBitMap : TBitMap;
begin
mBitMap := TBitMap.Create;
mBitMap.Width := Image_MusicPlayMax.Width;
mBitMap.Height := Image_MusicPlayMax.Height; src := rect(0,0,6,29);
dest := rect(0,0,mBitMap.Width,mBitMap.Height);
mBitMap.canvas.copyrect(dest, Image_MusicPlayDemo.canvas, src); src := rect(0,0,25,7);
dest := rect(0,3,25,10);
mBitMap.canvas.CopyRect(dest, Image_MusicPlayCur.canvas, src); Image_MusicPlayMax.Picture.Assign(mBitMap); mBitMap.Destroy;
end;procedure TForm1.FormResize(Sender: TObject);
begin
Button1Click(nil);
end;
例子下载地址:www.cocowo.com/down/123-2.rar这回加了鼠标跟随,在全屏的情况下,快速移动鼠标可以发现,卡呀!!
我用以前的方法,画一个宽5000宽的图片做快速移动,都一点不卡。
有没有更好的方法解决?
var dest, src : trect;
mBitMap : TBitMap;
begin
mBitMap := TBitMap.Create;
mBitMap.Width := Image_MusicPlayMax.Width;
mBitMap.Height := Image_MusicPlayMax.Height;
src := rect(0,0,6,29);
dest := rect(0,0,Image_MusicPlayMax.Width,Image_MusicPlayMax.Height);
mBitMap.canvas.copyrect(dest, Image_MusicPlayDemo.canvas, src);
src := rect(0,0,25,7);
if X/Max >1 then X:=Image_MusicPlayMax.Width;
if X <0 then X:=0;
dest := rect(Trunc((Image_MusicPlayMax.Width-25)*(X/Max)),6,Trunc((Image_MusicPlayMax.Width-25)*(X/Max))+25,13);
mBitMap.canvas.copyrect(dest, Image_MusicPlayCur.canvas, src);
Image_MusicPlayMax.Picture.Assign(mBitMap);end;
首先:在这个函数里,mBitMap没有释放,运行一段时间后内存会用光光,程序会嗝屁。
其次:mBitMap经常用到,就做成全局变量,这样不用进一次函数就申请释放一次了,可以提高点速度,包括那些个src,dest什么的,都可以尽量用全局变量,放在form的onResize事件里修改。
procedure TForm1.FormCreate(Sender: TObject);
begin
mBitMap := TBitMap.Create;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
mBitMap.Destroy;
end;