窗体改变大小时,Image没有显示(100)

  • 主题发起人 主题发起人 bluesadman
  • 开始时间 开始时间
B

bluesadman

Unregistered / Unconfirmed
GUEST, unregistred user!
今天发现了一个问题,就是当窗体改变大小的时候,采用 img1.Canvas.CopyRect(rect(10, img1.Height -40, 24, img1.Height -20), img2.Canvas, rect(0, 0, img2.Width, img2.Height));这种方式,img1不会显示图像。具体步骤如下img1的大小与窗体大小相同在小窗体时调用img1.Canvas.CopyRect(rect(10, img1.Height -40, 24, img1.Height -20), img2.Canvas, rect(0, 0, img2.Width, img2.Height));img1里有图像如果增大窗体,ima1里的图像不变,没有重新输出不知道这样描述是否能看懂[:(!]
 
img1.Stretch := True; ???img1.Canvas.StretchDraw(); ???还是在当窗体大小改时重画一下?procedure TForm1.FormResize(Sender: TObject);begin img1.Canvas.CopyRect(rect(10, img1.Height -40, 24, img1.Height -20), img2.Canvas, rect(0, 0, img2.Width, img2.Height));end;
 
在FormResize做吧 呵呵
 
实际上并不是formresize里面的问题,我怀疑是Image控件本身的问题,当需要描绘的图形在较低处时,会发生这种情况。也就是说。假设Image现在400高,如果把Image高变成800,那么在700处的图形会不能绘制。实际上,可能在500处的图像也不能绘制出来。感觉就是Image不能动态的改变大小。我指的是采用Draw,或者CopyRect等方法。而不是本身Image有图像再改变大小。
 
那是因为 Image.Canvas.ClientRect 你没有相应的改变, 而只是改变了 Image 宽高.你可以去看一下 Image.Canvas 是怎么取得的就知道了
 
不是这么回事procedure TForm1.FormResize(Sender: TObject);begin imgR.Height := ClientHeight - 50; imgR.ClientHeight := imgR.Height; imgR.Canvas.Draw(0, imgR.Height - 50, img1.Picture.Bitmap);end;有没有这一句 imgR.ClientHeight := imgR.Height;都一样,在设置Height时,clientheight就自动设置了。改变窗体大小,当你在缩小的时候,可以看到左下角有图像出来。但是放大的时候,只会看到原来绘制的图像,而在左下角没有新的图像出现。Image的高度仿佛是限定住一样。
 
其实只是刷新问题:var _imgchg:boolean=false;procedure TForm1.FormResize(Sender: TObject);begin img1.Canvas.CopyRect(rect(10, img1.Height -40, 24, img1.Height -20), img2.Canvas, rect(0, 0, img2.Width, img2.Height)); _imgchg:=true;end;加一个ttime控件!procedure TForm1.timer1time(Sender: TObject);begin if _imgchg then begin _imgchg:=false; img1.refresh; end;end;
 
可惜,答案依然不对。问题简单描述。Image永远不可能画在初始大小以外的地方。不知道这样是否清楚呢?还是上面的那个例子,在Resize的时候重绘,当Resize足够大的时候,超过原来的Image大小,就不能绘制了。
 
應該不是很難的問題吧
 
在image Canvas DC上作图时,第一次画后就确定大小了。如果第二次你要变大显示尺寸,好像是设置 image.picture.bitmap.width height的大小,你试一下。如果你不想自己手动调整bitmap的大小,就用painbox控件来作图。不要轻易说不能,呵呵
 
ok收工了确实是bitmap的大小需要变化,否则的话bitmap的Height和Width会是0。
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
621
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部