Q&A

  • 프린터 출력에 관해서 ......
안녕하세요 강석인이라고 합니다.

아래의 소스는 프로그램을 실행시킨 후 실행돼 있는 프로그램의 창을 캡쳐시키는

소스입니다.

그런데 600DPI 프린트는 잘되는데 300DPI는 너무 크게 나와 문제가 있습니다.

해서 여러 전문가님들의 도움을 청자고자 이렇게 질문을 하게 됐습니다.

검토하신후 답변좀 부탁드립니다.

아차! 그리고 아래의 소스는 제가 워드로 친거라 오타가 있을수도 있습니다.

또 아래의 소스말고 다른방법이 있으면 도움좀 주세요 그럼 20000

procedure TfrmCLZ0009.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Action := caFree;

end;



procedure TfrmCLZ0009.ImageMouseMove(Sender: TObject; Shift: TShiftState;

X, Y: Integer);

begin

if ssLeft in Shift then

begin

m_MaxVertPosition := Image.Height - ScrollBox.ClientHeight;

m_MaxHoriPosition := Image.Width - ScrollBox.ClientWidth;



ScrollBox.HorzScrollBar.Position := (m_MaxHoriPosition * X) div Image.Width;

ScrollBox.VertScrollBar.Position := (m_MaxVertPosition * X) div Image.Height;

end;

end;



procedure TfrmCLZS0009.PrintImage(f_han: HWND);

var

DC: HDC;

AspectRatio: Single;

OutputWidth, OutputHeight : Single;

begin

try

DC := GetDC(f_han);

Image.Top := 0;

Image.Left := 0;

Image.Width := 0;

Image.Height := 0;



BitBlt (Image.Canvas.Handle, 0, 0, Image.Width, Image.Height, DC, -4, -41, SRCCOPY);



ScrollBox.VertScrollBar.Position := 0;

ScrollBox.HorzScrollBar.Position := 0;



if Image.Width > ScrollBox.Widh then

Image.Left := 0

else Image.Left := (ScrollBox.Width - Image.Width) div 2;

if Image.Height > ScrollBox.Height then

Image.Top := 0

else Image.Top := (ScrollBox.Height - Image.Height) div 2;

ScrollBox.HorzScrollBar.Range := Image.Width;

ScrollBox.VertScrollBar.Range := Image.Height;

ScrollBox.VertScrollBar.Position := (Image.Height div 2) - (ScrollBox.Height div 2);

ScrollBox.HorzScrollBar.Position := (Image.Width div 2) - (ScrollBox.Width div 2);;



if not PrintDialog.Execute then Exit;



OutputWidth := Image.Picture.Width;

OutputHeight := Image.Picture.Height;

AspectRatio := OutputWidth / OutputHeight;



Printer.BeginDoc;



OutputHeight := 3200;

OutputWidth := OutputHeight * AspectRatio;

Printer.Canvas.StretchDraw(Rect (400,1500,

Trunc(OutputWidth), Trunc(OutputHeight)+1000),

Image.Picture.Graphic);



Printer.Canvas.StretchDraw(Rect(0,0,

Trunc(OutputWidth), Trunc(OutputHeight)),

Image.Picture.Graphic);}

Printer.EndDoc;

finally

ReleaseDC(f_han, DC);

end;

end;



end.



0  COMMENTS