|
맛스타 님이 쓰신 글 :
: //--------------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를 사용할 수도 있겠습니다.
|