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
[47752] Re:PageHeight,NewPage()
[] 885 읽음    2007-01-14 13:30
맛스타 님이 쓰신 글 :
: //--------------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() 885 2007/01/14
47766         Re:Re:PageHeight,NewPage() 맛스타 941 2007/01/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.