|
먼저 답변 주신 것에 감사드립니다. 매번 이 사이트에서 도움을 받습니다^^
글을 좀 늦게 봤습니다. 죄송하구요~
다름이 아니라 가르쳐 주신 방법을 써보았는데 작동이 잘 안되서 다시금 질문하게 되었습니다.
저의 소스 코드 "프린터출력버튼" 중 이중 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를 사용할 수도 있겠습니다.
|