Содержание материала

Недавно довелось использовать код из "DRKB", для печати stringGrid, однако он не выводит на печать (у меня не вывел) 0-й столбец.
 
Я Переделал его, добавив прорисовку ячеек таблицы, более удобное расположение заголовка таблицы, в качестве параметров процедуре можно передать отступ от края и сверху листа в миллиметрах. Также снабдил код комментариями. (я сам новичёк в программировании, и будь в том коде комменты, разобрался бы куда легче чем пришлось).
 
Надеюсь кому нибудь пригодится...

Code:

procedure PrintGrid(sGrid: TStringGrid;

left_StandOff,top_StandOff:integer; sTitle: string);

var

X1, X2,PixelsX,PrinterCoordX: Integer;

Y1, Y2,PixelsY,PrinterCoordY: Integer;

I: Integer;

F: Integer;

TR: TRect;

begin

{ left_StandOff - отступ в миллиметрах слева от края листа

top_StandOff - отступ в миллиметрах сверху от края листа

PrinterCoordX и PrinterCoordY - тот же отступ только в пикселах

Высота строк и ширина столбцов взяты соответственно 150 и 400,

при желании их размер можно передать в процедуру как параметры

}

//получаем информацию о разрешении принтера

PixelsX:=GetDeviceCaps(printer.Handle,LogPixelsX);//разрешение по Х

PixelsY:=GetDeviceCaps(printer.Handle,LogPixelsY);//разрешение по Y

PrinterCoordX:=round(PixelsX/25.4*left_StandOff);//переводим мм в пиксели

PrinterCoordY:=round(PixelsY/25.4*top_StandOff); //---

with printer do

begin

//Печатаем заголовок таблицы

Title := sTitle;

BeginDoc; // Начало печати

Canvas.Pen.Color := 0; // цвет-чёрный

Canvas.Font.Name := 'verdana'; // шрифт

Canvas.Font.Size := 10; // размер шрифта

Canvas.Font.Style := [];

//Текс заголовка в заданных координатах

Canvas.TextOut(PrinterCoordX, PrinterCoordY-100-

printer.Canvas.Font.Size*10, Printer.Title);

Canvas.Pen.Color := 0;

Canvas.Font.Name := 'Verdana';

Canvas.Font.Size := 8;

end;

for i:=0 to sgrid.colcount-1 do //перебираем столбцы

for f:=0 to sgrid.rowcount-1 do //перебираем в столбце все строки

begin

X1 := PrinterCoordX+i*400; //400-это ширина столбца

X2 := PrinterCoordX+400+i*400; //тоже

Y1:=PrinterCoordY+f*150; //150-высота строки

y2:=PrinterCoordY+150+f*150; //тоже

TR:=Rect(x1,y1,x2,y2);

with printer do

begin

Canvas.MoveTo(x1,y1);//Двигаем рисовалку в верхний левый угол таблицы

{пишем надпись в квадрате(ячейке) i-столбеца и f-строки со сдвигом

от верха на Y+50 и со сдвигом от левого края колонки на X+50

}

Canvas.TextRect(TR, X1 + 50, Y1 + 50, sGrid.Cells[i,f]);

//рисуем линии ячейки

Canvas.LineTo(x1,y2);

Canvas.LineTo(x2,y2);

Canvas.LineTo(x2,y1);

Canvas.LineTo(x1,y1);

end;

end;

Printer.EndDoc; // конец печати

end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

begin

PrintGrid(StringGrid1,20,20, 'Таблица1: "Название"');

end;

 

Автор: pankerstein

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить