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
[40839] Page 컨트롤의 ActivePage(Tabsheet) 를 인쇄 시에 인쇄 내용에 다이얼로그 겹침 문제
다솜돌이 [dasomoli] 935 읽음    2005-07-01 11:36
안녕하세요.

다솜돌이 입니다.

Page 컨트롤에 tabsheet 여러개를 이용한 프로그램을 코딩중입니다.

메뉴에서 Print 메뉴를 선택했을 때 ActivePage 를 인쇄하고 싶어서 다음과 같이 코딩하였습니다.

void __fastcall TMainForm::MenuFilePrintClick(TObject *Sender)
{
    // 프린터 설정을 위해 포인터 얻기
    TPrinter *pPrt = Printer();
    // 페이지 출력 기본 방향 가로.
    pPrt->Orientation = poLandscape;

    // 인쇄 다이얼로그 띄움
    if(PrtDlg->Execute())   {
        pPrt->BeginDoc();
        // 차트 출력
        TImage *image = new TImage(Page1->Pages[Page1->ActivePageIndex]);
        double wRatio = static_cast<double>(pPrt->PageWidth) / Page1->Pages[Page1->ActivePageIndex]->Width;
        double hRatio = static_cast<double>(pPrt->PageHeight) / Page1->Pages[Page1->ActivePageIndex]->Height;
        double ratio = min(wRatio, hRatio) - 0.4;
        TRect rect(0, 0,
                    Page1->Pages[Page1->ActivePageIndex]->Width * ratio,
                    Page1->Pages[Page1->ActivePageIndex]->Height * ratio);
        image->Picture->Bitmap->Width = Page1->Pages[Page1->ActivePageIndex]->Width;
        image->Picture->Bitmap->Height = Page1->Pages[Page1->ActivePageIndex]->Height;
        TCanvas *tempCanvas = new TCanvas;
        tempCanvas->Handle = GetDC(Page1->Pages[Page1->ActivePageIndex]->Handle);
        image->Picture->Bitmap->Canvas->CopyRect(rect, tempCanvas, rect);

        LogPal SysPal;
        SysPal.lPal.palVersion = 0x300;
        SysPal.lPal.palNumEntries = 256;
        GetSystemPaletteEntries(tempCanvas->Handle,0,256,SysPal.lPal.palPalEntry);
        image->Picture->Bitmap->Palette = CreatePalette(&(SysPal.lPal));

        pPrt->Canvas->StretchDraw(rect, image->Picture->Bitmap);

        delete tempCanvas;
        delete image;

        pPrt->EndDoc();
    }
}


이미지를 만들고, ActivePage 의 DC를 얻어 영역만큼 복사해서 프린트 하는 루틴입니다.

그런데 이렇게 하였을 경우, PrtDlg->Execute() 시에 나타난 다이얼로그가 탭시트 위에 떠 있던 경우

인쇄시에 다이얼로그 일부가 탭시트 위에 그려진채로 인쇄되더군요;;

이를 방지할 수 있는 방법이나

아니면, 탭시트를 인쇄할 수 있는 다른 방법이 있다면 알려주세요.

+ -

관련 글 리스트
40839 Page 컨트롤의 ActivePage(Tabsheet) 를 인쇄 시에 인쇄 내용에 다이얼로그 겹침 문제 다솜돌이 935 2005/07/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.