Q&A

  • 용지 크기에 맞춰 출력을 하려면 어떻게?


현재 사용하고 있는 폼과 내용을 그대로 출력하고 싶답니다.

그래서 print문을 사용하여 출력했는데,

출력은 정상적으로 이루어 지지만 용지 크기와 맞지 않아

출력이 잘려서 되고 있답니다.

이것을 용지 크기에 맞게, 원하는 위치에 출력을 하고 싶은데

어떻게 하면 될까요?

도움 부탁드립니다.



사용하다 문제가 되는 것 중에 하나가 또 있는데...

PrintLandscape문이 help를 찾다보니 나와서 사용하였는데

Undeclared identifier: 'PrintLandscape'가 뜨더라구요.

이건 어떻게 하면 해결할 수 있을까요?



1  COMMENTS
  • Profile
    김영대 1999.07.29 23:00
    황하성 께서 말씀하시기를...

    >

    > 현재 사용하고 있는 폼과 내용을 그대로 출력하고 싶답니다.

    > 그래서 print문을 사용하여 출력했는데,

    > 출력은 정상적으로 이루어 지지만 용지 크기와 맞지 않아

    > 출력이 잘려서 되고 있답니다.

    > 이것을 용지 크기에 맞게, 원하는 위치에 출력을 하고 싶은데

    > 어떻게 하면 될까요?

    > 도움 부탁드립니다.

    >

    > 사용하다 문제가 되는 것 중에 하나가 또 있는데...

    > PrintLandscape문이 help를 찾다보니 나와서 사용하였는데

    > Undeclared identifier: 'PrintLandscape'가 뜨더라구요.

    > 이건 어떻게 하면 해결할 수 있을까요?

    >



    제가 가지고 있던 자료인데 참고하세요



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, Printers;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap);

    var

    Header, Bits: Pointer;

    HeaderSize, BitsSize: Integer;

    begin

    GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize);

    GetMem(Header, HeaderSize);

    GetMem(Bits, BitsSize);

    try

    GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^);

    StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top,

    DestRect.Right - DestRect.Left, DestRect.Bottom - DestRect.Top,

    0, 0, ABitmap.Width, ABitmap.Height, Bits, TBitmapInfo(Header^),

    DIB_RGB_COLORS, SRCCOPY);

    finally

    FreeMem(Header, HeaderSize);

    FreeMem(Bits, BitsSize);

    end;

    end;



    { Print a Bitmap using the whole Printerpage }

    procedure PrintBitmap(ABitmap: TBitmap);

    var

    relheight, relwidth: integer;

    begin

    screen.cursor := crHourglass;

    Printer.BeginDoc;

    if ((ABitmap.width / ABitmap.height) > (printer.pagewidth /printer.pageheight)) then

    begin

    { Stretch Bitmap to width of Printerpage }

    relwidth := printer.pagewidth;

    relheight := MulDiv(ABitmap.height, printer.pagewidth,ABitmap.width);

    end else

    begin

    { Stretch Bitmap to height of Printerpage }

    relwidth := MulDiv(ABitmap.width, printer.pageheight, ABitmap.height);

    relheight := printer.pageheight;

    end;

    DrawImage(Printer.Canvas, Rect(0, 0, relWidth, relHeight), ABitmap);

    Printer.EndDoc;

    screen.cursor := crDefault;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    PrintBitmap(Form1.GetFormImage);

    end;



    end.