안냐세요... 항상 도움만 받다가... 드뎌.
윈98에서 폼을 인쇄하기 고생하다가 드뎌 찾아낸 방법입니다.
폼인쇄를 위해 print()문을 사용하여도 빈종이만 나오고
또 GetFormImage()로 폼의 이미지를 받아서 Printer()->Canvas에 저장을 해도
출력이 되지 않을 경우와 Image를 프린터로 인쇄할 경우에 사용하면 유용함니다...
일단 PrintDIB 라는 컴포넌트를 설치 합니다.
다음에 인쇄할 폼에 컴포넌트를 배치 합니다.
간단히 폼을 인쇄하는 소스의 예입니다.
#include <printers.hpp> // 프린터를 제어하기위해 포함.
#pragma link "PrintDIB" // PrintDIB 컴포넌트 배치하면 자동으로 생성
void __fastcall TForm1::Button1Click(TObject *Sender) // 화면상의 버튼을 누르면 인쇄시작
{
int target_width = Printer()->PageWidth; // 가로 배율을 조정하기 위한 변수 선언
int target_height = Printer()->PageHeight; // 세로 배율을 조정하기 위한 변수 선언
//------ 폼 이미지를 저장하기 위한 비트맵 공간을 확보
Graphics::TBitmap *FormImage = new Graphics::TBitmap();
//------ 폼 이미지를 저장
FormImage = GetFormImage(); //get form image
// 종이 배율에 맞추어 폼 이미지를 조정하기 위한 루틴 (가로나 세로에 꽉차게 인쇄하기 위함.)
target_width = Printer()->PageWidth;
target_height = FormImage->Height * (Printer()->PageWidth / FormImage->Width);
if (target_height > Printer()->PageHeight)
{
target_width = FormImage->Width * (Printer()->PageHeight / FormImage->Height);
target_height = Printer()->PageHeight;
}
// end of scale compute.
// 프린트 처리부
Printer()->Title = "Mold parameter print-out"; // 인쇄 관리자에 인쇄 제목이 나오도록..
Printer()->BeginDoc(); // 프린트 문서 시작.
PrintDIB1->StretchDrawDIB(Printer()->Canvas, 0, 0, target_width, target_height, FormImage);
// ^^ PrintDIB 컴포넌트에서 나오는 함수
// PrintDIB1->StretchDrawDIB(이미지전송 목적지,
// 왼쪽위좌표, 오른쪽위좌표,
// 왼쪽밑좌표, 오른쪽밑좌표,
// 원본이미지);
Printer()->EndDoc(); // 프린트 문서 끝.
delete FormImage;
}
인쇄를 위해 실제로 사용된 함수는 StretchDrawDIB 밖에는 없습니다.
여러가지로 사용해 봤는데 잘되더군요.. 넘 어렵지도 않구요.
bytamin-c의 홈페이지에서 검색해서 찾은 내용입니다.
그 내용에 의하면 이미지를 프린터에 인쇄할 경우에 사용되는 컴포넌트라고 설명되어 있습니다.
자세한 원문은
http://bcbcaq.bytamin-c.com/CAQs/print_graphics.html 입니다.