Друк

Програма друк дозволяє, як це не дивно, роздрукувати файл

void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->Options << goEditing << goTabs;
StringGrid1->Cells[0][0] ="";
StringGrid1->Cells[1][0] = " Найменування";
StringGrid1->Cells[2][0] = " Ціна";
StringGrid1->Cells[3][0] = " Кількість";
StringGrid1->Cells[4][0] = "Сума";

StringGrid1->ColWidths[0] = 30;
StringGrid1->ColWidths[1] = 250;
StringGrid1->ColWidths[2] = 80;
StringGrid1->ColWidths[3] = 50;
StringGrid1->ColWidths[4] = 80;

for ( int i = 1; i < 11; i++)
if (i < 10)
StringGrid1->Cells[0][i] = " " + IntToStr(i);
else
StringGrid1->Cells[0][i] = IntToStr(i);
int w = 0;
for (int i = 0; i < StringGrid1->ColCount; i++)
w += StringGrid1->ColWidths[i];
StringGrid1->Width = w + StringGrid1->ColCount + 1 ;
StringGrid1->Height = StringGrid1->DefaultRowHeight * StringGrid1->
RowCount + StringGrid1->RowCount + 1;
}
#include "Printers.hpp "
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TPrinter *Prn; // принтер
#define LEFT_MARGIN 2 // відступ зліва 2 см
#define TOP_MARGIN 2 // відступ зверху 2 см
float dpiX, dpiY; // роздільна здатність принтера за X і Y
float kx, ky; // коеф. перерахунку координат екрана
// у координати принтера по X і Y
// таблиця
int p[5]; // позиції колонок
int xl,yl,x2,y2; // межі таблиці
int px, py; // покажчик точки виведення
int i, j;
Prn = Printer();
dpiX = GetDeviceCaps(Prn->Handle,LOGPIXELSX);
dpiY = GetDeviceCaps(Prn->Handle,LOGPIXELSY);
kx = dpiX / Screen->PixelsPerInch;
ky = dpiY / Screen->PixelsPerInch;
px = LEFT_MARGIN / 2.54 * dpiX;
py = TOP_MARGIN / 2.54 * dpiY;
p[0] = px;
for (i = 1; i < 5; i++ )
p[i] = p[i-1] + StringGrid1->ColWidths[i-1]* kx + i;
Prn->BeginDoc();
Prn->Canvas->Font->Name = Label1->Font->Name;
Prn->Canvas->Font->Size = Label1->Font->Size;
Prn->Canvas->TextOut(px,py,Label1->Caption);
py = py + Label1->Font->Size * 2 * ky;
xl = px;
yl = py;
Prn->Canvas->Font->Name = StringGrid1->Font->Name;
Prn->Canvas->Font->Size = StringGrid1->Font->Size;
x2 = p[4] + StringGrid1->ColWidths[4]* kx;
y2 = py + StringGrid1->RowCount *
StringGrid1->RowHeights[1] * ky;
for ( j = 0; j < StringGrid1->RowCount; j++)
{
for (i =0 ; i < StringGrid1->ColCount; i++)
{
Prn->Canvas->TextOut(p[i],py,StringGrid1->Cells[i][j]);
Prn->Canvas->MoveTo(p[0],py);
Prn->Canvas->LineTo(x2,py);
}
py = py+ StringGrid1->RowHeights[j]* ky;
}
for ( i = 0; i < StringGrid1->ColCount; i++ )
{
Prn->Canvas->MoveTo(p[i],yl);
Prn->Canvas->LineTo(p[i],y2);
}
Prn->Canvas->MoveTo(x2,yl);
Prn->Canvas->LineTo(x2,y2);
Prn->Canvas->MoveTo(xl,y2);
Prn->Canvas->LineTo(x2,y2);
py = y2 + 0.5 / 2.54 * dpiY;
Prn->EndDoc();
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *