Недавно довелось использовать код из "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
- << Назад
- Вперёд
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!