我用Timage来实现打印预览,在改变窗口大小后,TImage的大小也相应改变,但是TImage的可视大小却没有改变。请问如何让TImage的可视大小也相应改变。
procedure TForm1.FormCreate(Sender: TObject);
begin
  mf:=TMetaFile.Create;
  dpi:=GetDeviceCaps(Printer.Handle, LogPixelsX);
  dpm:=trunc(dpi/25.4);
  image1.Top:=0; image1.left:=0; image1.Width:=self.ClientWidth;
  re.Left:=0; re.Top:=0; re.Right:=trunc(210*dpm); re.Bottom:=trunc(297*dpm);
end;procedure TForm1.Preview(vCanvas: TCanvas);
begin
  with vCanvas do begin
    try
      Repaint;
      Font.Size:=12;
      Font.Name:='黑体';
      Textout(0, 0, '中华人民共和国');
    finally
      free;
    end;
  end;
end;procedure TForm1.FormResize(Sender: TObject);
begin
  image1.Width:=ClientWidth;
  Preview(TMetaFileCanvas.Create(mf, Printer.Handle));
  image1.Canvas.StretchDraw(re, mf);
end;

解决方案 »

  1.   

    image1.Picture.Bitmap.Width:= ClientWidth;
      

  2.   

    procedure TForm1.FormResize(Sender: TObject);
    begin
      image1.Width:=ClientWidth;
      Preview(TMetaFileCanvas.Create(mf, Printer.Handle));
      image1.Canvas.StretchDraw(re, mf);------这句有误!
    end;
    窗体改变大小之后,re也需要跟着改变的,这样才会放大
      

  3.   

    哦,这样啊,,我理解了...
    呵呵,,那你先用白色画刷填充Image1,
    如下:
      image1.Width:=ClientWidth;
      //加入白色背景
      image1.Canvas.Brush.Color:=clWhite;
      image1.Canvas.Brush.Style:=bsSolid;
      Image1.Canvas.FillRect(Rect(0,0,image1.Width,image1.Height));  Preview(TMetaFileCanvas.Create(mf, Printer.Handle));
      image1.Canvas.StretchDraw(re, mf);------这句有误!
      

  4.   

    可能是我表述不清楚,白色部分指的是能显示的区域,我改变了image1的大小,但始终image1可视部分都是最初image1的大小。我就是想让可视部分随image1的大小一起改变。
      

  5.   

      imgPic.Width := trunc(210*dpm); 
      imgPic.Height := trunc(297*dpm);
      imgPic.Picture.Bitmap.Width := imgPic.Width;
      imgPic.Picture.Bitmap.Height := imgPic.Height;
      imgPic.Canvas.FillRect(Rect(0, 0, PageWidth, PageHeight));
      

  6.   

      image1.Width := trunc(210*dpm); 
      image1.Height := trunc(297*dpm);
      image1.Picture.Bitmap.Width := image1.Width;
      image1.Picture.Bitmap.Height := image1.Height;
      image1.Canvas.FillRect(Rect(0, 0, image1.Width, image1.Height));