|
김용준 님이 쓰신 글 :
: TPrinter 를 이용하여 form 전체를 프린트 할 경우
:
: Graphics::TBitmap *FormImage = Form->GetFormImage();
: if(PrintDialog->Execute()) {
: printer()->BeginDoc();
: printer()->Canvas->Draw((printer()->PageWidth Form->Width)/2,
: (printer()->PageHight Form->Hight)/2,
: FormImage);
: Printer()->EndDoc();
: }
: delete FormImage;
:
: 이런식으로 하면 된다고 하던데요...
:
: 그렇다면 form 전체를 프린트 하는 것이 아니라 그 폼 내의 어떤 표나 그래프 등만을 따로 인쇄하려면 어떻게 해야하나요?
: 첫째줄의 Form->GetFormImage(); 부분만 고치면 될꺼 같은데...
:
: 답변좀 꼭 부탁드립니다.
안녕하십니까?
한꼬맹이 입니다.
폼의 어떤특정 영역만 인쇄하는 함수를 제가 작성해봤습니다.(다시 리플쓰는 기념으로 ~~);
void __fastcall TForm1::PrintRect(TRect ARect)
{
Graphics::TBitmap *FormImage, *ClipImage;
PBitmapInfo Info;
unsigned InfoSize;
Byte *Image;
unsigned ImageSize;
HBITMAP Bits;
int DIBWidth, DIBHeight;
int PrintWidth, PrintHeight;
Printer()->BeginDoc();
try
{
FormImage = GetFormImage();
ClipImage = new Graphics::TBitmap();
ClipImage->Width = ARect.Width();
ClipImage->Height = ARect.Height();
ClipImage->Canvas->CopyRect(Rect(0, 0, ARect.Width(), ARect.Height()), FormImage->Canvas, ARect);
Printer()->Canvas->Lock();
try
{
Bits = ClipImage->Handle;
GetDIBSizes(Bits, InfoSize, ImageSize);
Info = (PBitmapInfo)new char[InfoSize];
try
{
Image = new Byte[ImageSize];
try
{
GetDIB(Bits, 0, Info, Image);
DIBWidth = Info->bmiHeader.biWidth;
DIBHeight = Info->bmiHeader.biHeight;
PrintWidth = MulDiv(DIBWidth, GetDeviceCaps(Printer()->Canvas->Handle,
LOGPIXELSX), PixelsPerInch);
PrintHeight = MulDiv(DIBHeight, GetDeviceCaps(Printer()->Canvas->Handle,
LOGPIXELSY), PixelsPerInch);
StretchDIBits(Printer()->Canvas->Handle, 0, 0, PrintWidth, PrintHeight, 0, 0,
DIBWidth, DIBHeight, Image, Info, DIB_RGB_COLORS, SRCCOPY);
}
__finally
{
delete[] Image;
}
}
__finally
{
delete[] Info;
}
}
__finally
{
Printer()->Canvas->Unlock();
delete ClipImage;
delete FormImage;
}
}
__finally
{
Printer()->EndDoc();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
PrintRect(Rect(50, 55, 300, 300)); //폼의 특정 영역만 인쇄
}
그럼 도움되시길.....
|