C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[13403] Re:인쇄에 대한 질문입니다...
권대길.한꼬맹이 [onekid] 1058 읽음    2001-12-06 01:00
김용준 님이 쓰신 글 :
: 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)); //폼의 특정 영역만 인쇄
}

그럼 도움되시길.....

+ -

관련 글 리스트
13388 인쇄에 대한 질문입니다... 김용준 754 2001/12/05
13403     Re:인쇄에 대한 질문입니다... 권대길.한꼬맹이 1058 2001/12/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.