★★★★★ Timage控件显示不全的问题,求教高手 ★★★★★(30分)

  • 主题发起人 uboat_57
  • 开始时间
U

uboat_57

Unregistered / Unconfirmed
GUEST, unregistred user!
我将一个timage放在一个scrollbox中,timage的宽为780,在
procedure TForm1.FormCreate(Sender: TObject);
var
k:integer;
q:integer;
begin
k:=50;
w:=image1.width;
h:=image1.height;
while k<h do
begin
image1.Canvas.moveto(0,k);
image1.Canvas.lineto(w,k);
k:=k+50;
end;
end;
在image1上画一些横线间隔为50。

procedure TForm1.Button4Click(Sender: TObject);
begin
image1.width:=1800;
image1.canvas.MoveTo(1000,200);
image1.canvas.lineto(1200,300);
end;
修改image1的宽度,并画线。
但是只有宽度为780以内的部分背景变为白色,780以外的部分背景颜色没变化(为默认的灰色)而且也没有画直线,无法正常显示。如果在
procedure TForm1.FormCreate(Sender: TObject);
中不执行
while k<h do
begin
image1.Canvas.moveto(0,k);
image1.Canvas.lineto(w,k);
k:=k+50;
end;
此问题不会产生。为何缘故。
 
添加一句 : image1.AutoSize :=True;
 
你第一次在Image的Canvas上画线的时候,Image根据自己的宽度创建了一个TBitmap,你画线
就是在这个TBitmap上画的,而当你改变Image宽度的时候,TBitmap是另外一个对象,他的尺寸
并没有改变,因此你能操作的画布还是原来的那块区域。解决的办法是
每次改变了Image的大小以后,再手动改变Image.Picture.Bitmap的尺寸大小,这样TBitmap
才会被重新分配缓冲区大小。也就达到你想要的尺寸。


...如果改变了Image的尺寸...

Image1.Picture.Bitmap.Width=Image1.Width;
Image1.Picture.Bitmap.Height=Image1.Height;

...继续画图...
 
多谢zyg_zm的指导,问题解决。[:D]
 
顶部