窗体上有Image和Button控件,另外有Edit1(高)和Edit2(宽)控件。我想实现的功能是:在Edit中设置高度和宽度后,单击Button后,就可以按照尺寸(必须是Edit中设置的高度和宽度)打印Image里面的图片。宽度和高度最好是以毫米为单位。请写出这个Button的单击事件。注意不要用第三方控件。另外我还想实现一个功能:Image支持拖放功能(即:把外部JPG图片直接拖到窗体的Image控件上就可以被载入)

解决方案 »

  1.   

    毫米单位自己去换算Canvas.StretchDraw(Rect(0, 0, StrToInt(Edit1.Text), StrToInt(Edit2.Text)), Image1.Picture.Graphic);
      

  2.   

    帮你补充一下1楼未回答的打印问题。procedure TForm1.Button1Click(Sender: TObject);
    var
      ScaleX, ScaleY: Integer;
      R: TRect;
    begin
      Printer.BeginDoc;
      with Printer do
      try
        ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
        ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
        R := Rect(0, 0, Image1.Picture.Width * ScaleX,Image1.Picture.Height * ScaleY);
        Canvas.StretchDraw(R, Image1.Picture.Graphic); //直接往打印机输出"Printer.Canvas.StretchDraw"
      finally
        EndDoc;
      end;
    end;
      

  3.   

    4楼的朋友,你的按扭单击事件里面缺少两点:1.未调用打印机设置对话框。
    2.没有用到Edit1.text和Edit2.text设置高度和宽度。(如果图片不合尺寸可以使图片变形但不可以剪截)希望再次看到您的回复。写出来,我马上结贴。
      

  4.   

    楼主,你是太懒了还是太菜了?
    另外,是否立马结贴我一点都不关心,我不在乎分,很反感这种字眼。procedure TForm1.Button1Click(Sender: TObject);
    var
      R: TRect;
      ScaleX, ScaleY: Integer;
    begin
      if not PrinterSetupDialog.Execute then exit;
      Printer.BeginDoc;
      with Printer do
      try
        ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
        ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
        R := Rect(0, 0, StrToInt(Edit1.text) * ScaleX,StrToInt(Edit2.text) * ScaleY);
        Canvas.StretchDraw(R, Image1.Picture.Graphic); //直接往打印机输出"Printer.Canvas.StretchDraw"
      finally
        EndDoc;
      end;
    end;
      

  5.   

    分给了,如果Image支持拖放功能就更好了。