Ponizej zamieszczam kod zrodlowy z helpa c++ Cuilder. Drukuje on zawartosc komponentu PageControl jednak na stronie A4 zajmuje może 1/10 rzeczywistego rozmiaru. W widocznym kodzie istnieje umieszczenie tego komponentu w dowolnym miejscu na wydruku natomiast co zrobic aby ona sie drukowal na calej stronie. Wiem ze trzeba pobrac rozmiar strony, na ktorej bedzie drukowane i przeskalowac, ale jak go wcisnać do tego kodu. Probowalem na rozne sposoby.
PrintDialog1->Options.Clear();
PrintDialog1->Options << poPageNums << poSelection;
PrintDialog1->FromPage = 1;
PrintDialog1->MinPage = 1;
PrintDialog1->ToPage = PageControl1->PageCount;
PrintDialog1->MaxPage = PageControl1->PageCount;
if (PrintDialog1->Execute())
{
int Start, Stop;
// determine the range the user wants to print
switch (PrintDialog1->PrintRange)
{
case prSelection:
Start = PageControl1->ActivePage->PageIndex;
Stop = Start;
break;
case prPageNums:
Start = PrintDialog1->FromPage - 1;
Stop = PrintDialog1->ToPage - 1;
break;
default: // prAllPages
Start = PrintDialog1->MinPage - 1;
Stop = PrintDialog1->MaxPage - 1;
break;
}
// now, print the pages
Printer()->BeginDoc();
for (int i = Start; i <= Stop; i++)
{
PageControl1->Pages[i]->PaintTo(Printer()->Handle, 10, 10);
if (i != Stop)
Printer()->NewPage();
}
Printer()->EndDoc();
}
Ciekawe jest rozwiazanie ponizsze w przypadku komponentu Memo jednak tu powstaje problem, ze drukowanie odbywa sie tekstu, ktory sie w nim znajduje natomiast elementy takie jak edit czy label ktore chcialbym umiescic nie uda sie wydrukowac.
c++:
TPrinter *Prntr = Printer();
TRect r = Rect(200,200,Prntr->PageWidth - 200,Prntr->PageHeight- 200);
Prntr->BeginDoc();
for( int i = 0; i < Memo1->Lines->Count; i++)
Prntr->Canvas->TextOut(200,200 + (i *
Prntr->Canvas->TextHeight(Memo1->Lines->Strings[i])),
Memo1->Lines->Strings[i]);
Prntr->Canvas->Brush->Color = clBlack;
Prntr->Canvas->FrameRect(r);
Prntr->EndDoc();
nad czym ubolewam. Moze sie jednak da:)