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
[47766] Re:Re:PageHeight,NewPage()
맛스타 [] 941 읽음    2007-01-16 09:06
먼저 답변 주신 것에 감사드립니다. 매번 이 사이트에서 도움을 받습니다^^
글을 좀 늦게 봤습니다. 죄송하구요~
다름이 아니라 가르쳐 주신 방법을 써보았는데 작동이 잘 안되서 다시금 질문하게 되었습니다.
저의 소스 코드 "프린터출력버튼" 중 이중 for문 안에 주신 코드를 삽입해봤습니다.


h = p->Canvas->TextHeight(S);   //h는 167이 고정적으로 나옵니다.
int printed_height=0;

for(i=1; i<StringGrid1->RowCount; i++)  //행수는 100.
         {
            //if(printed_height+h>p->PageHeight) {  PageHeight의 값은  3344  나옵니다.  꽉찬 상태가 아닙니다.
               if(printed_height+h> 10855) {      //10855는 문자열의 높이와 행수의 곱으로 한 페이지가 꽉찬 상태.
                 p->NewPage();
                 printed_height = 0;
                 }
               printed_height += h
;
             for(j=1; j<StringGrid1->ColCount; j++)
             {
               S = StringGrid1->Cells[j][i];
               p->Canvas->TextOutA(n*j,i*h,S);
             }

         }

이렇게 쓰니깐 2장으로 잡아줍니다. 문제는 2번째 장에 아무것도 인쇄가 되지 않습니다.
자동적으로 인쇄의 나머지양을 잡아 주는것이 아닙니까? 제가 또 따로 무엇을 더 추가하여야 하나요?
자꾸 질문 드려서 죄송하네요-_-;;;;

ㅂ 님이 쓰신 글 :
: 맛스타 님이 쓰신 글 :
: : //--------------StringGrid에 값을 채움.
: : void __fastcall TForm1::FormShow(TObject *Sender)
: : {
: :    StringGrid1->RowCount = 20;  <===요값을 늘려보아도 PageHeight는 그대로 입니다. PageHeight = 3344나옴.
: :    StringGrid1->ColCount = 8;
: :    short int i,j;
: :    for(i=1; i<=StringGrid1->RowCount; i++)
: :    {     
: :           for(j=1; j<=StringGrid1->ColCount; j++)
: :           {
: :            StringGrid1->Cells[j][i]="999.1111";           
: :            }
: :     }
: : }
: :
: :
: : //-----------------프린터출력버튼(StringGrid의 내용을 출력)
: : void __fastcall TForm1::cmd_PrintClick(TObject *Sender)
: : {     
: :   if(!Printdialog1->Execute())
: :      return;  
: :   else{  
: :         Printer()->Canvas->Font->Size = 40;
: :         Printer()->Canvas->Font->Name = "바탕체";
: :         TPrinter *p = Printer();
: :         p->BeginDoc();
: :         TCanvas *c = p->Canvas;
: :         HDC dc = c->Handle;
: :         int XPI = GetDeviceCaps(dc,LOGPIXELSX);     
: :         int YPI = GetDeviceCaps(dc,LOGPIXELSY);     
: :         SetMapMode(dc,MM_ANISOTROPIC);            
: :         SetWindowExtEx(dc,1000,1000,NULL);           
: :         SetViewportExtEx(dc,XPI,YPI,NULL);             
: :
: :         int i,j,h,n;
: :         AnsiString S("텍스트 인쇄");
: :         h = p->Canvas->TextHeight(S);    //"텍스트인쇄"를 기준으로 높이.
: :         n = p->Canvas->TextWidth(S);    //"텍스트인쇄"를 기준으로 너비.
: :
: :          for(i=1; i<StringGrid1->RowCount; i++)
: :          {
: :               for(j=1; j<StringGrid1->ColCount; j++)
: :               {
: :                 S = StringGrid1->Cells[j][i];
: :                 p->Canvas->TextOutA(n*j,i*h,S);
: :               }
: :
: :          }
: :        
: :         // if(p->PageHeight > 6688)  <== PageHeight요넘이 변화가 없네요. StringGrid의 행이 늘어나더라도.
: :         p->NewPage();                 
: :         p->EndDoc();
: :     }
: :
: : }
: :
: : 제가 하려는 건 StringGrid에 행수가 많을 경우 1장 이상으로 계속적으로 출력하려는건데요.
: : 게시판을 이리저리 검색하다가 PageHeight를 기준으로 해서 NewPage()의 실행을 하라 하더라구요.
: : 제 짧은 지식으로  "StringGrid에 행수가 늘면 PageHeight값이 올라가겠지"라고 판단한 후 이리저리 실험해봤는데
: : StringGrid의 행수가 적든 많든 간에 PageHeight값이 똑같더라구요.
: :
: : 어떻게 저 PageHeight를 조절해야하고 또 기준으로 삼을 수 있을까요?
: : 즉, StringGrid의 Row값이 많아 한장 이상으로 나오면 다음장을 어떻게 나오게 할 수 있을까요?
: : 고수님들의 답변 부탁드립니다.(--)(__)
:
: PageHeight는 TPrinter의 속성으로서 해당 프린터의 용지와 설정에 따라 그 크기가 다릅니다.
: int printed_height=0;
: h = p->Canvas->TextHeight(S);   
: if(printed_height+h>p->PageHeight) {
:  p->NewPage();   
:  printed_height = 0;
: }
:  printed_height += h;
:
: 위의  printed_height 대신 p->PenPos를 사용할 수도 있겠습니다.

+ -

관련 글 리스트
47750 PageHeight,NewPage() 맛스타 793 2007/01/14
47752     Re:PageHeight,NewPage() 886 2007/01/14
47766         Re:Re:PageHeight,NewPage() 맛스타 941 2007/01/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.