Gebruik CodeTyphon in Windows8.1.
Zou graag een message tonen zolang de printer bezig is.
Code:
procedure TFmain.MenuItemPRINTClick(Sender: TObject);
begin
If QuestionDlg ('KEUZE !','Gegevens afdrukken?'+#13+
'',mtConfirmation, [mrYes,'OK', mrNo, 'Annuleren'],'') = mrYes then
begin
// code nodig om boodschap te tonen : "Begin print"
PrintStringGrid(StringGrid1, 'Print Stringgrid Wiezen '+
formatdatetime('dd'+'/'+'mm'+'/'+'YYYY', Now));
// code nodig om boodschap te verwijderen
end;
end;
Code:
procedure PrintStringGrid(Grid: TStringGrid; Title: string);
var
varI, varJ, varP : Integer;
varAnzSeiten, varSeite : Integer;
varRow, varRowSize : Integer;
varFontHeight : Integer;
varYPos, varXPos : Integer;
varHorzSize, varVertSize : Integer;
varHeaderSize, varFooterSize : Integer;
varFooter : String;
varMMX, varMMY : Extended;
begin
//FontSize, Header, Footer, Row distance
varHeaderSize := 100;
varFooterSize := 200;
varRowSize := 78; //36; aangepast - spatie tussen lijnen
varFontHeight := 68; //36; //aangepast
Printer.Title := Title;
Printer.BeginDoc;
//Druck auf mm einstellen
varMMX := GetDeviceCaps (TWinPrinter(Printer).Handle, PHYSICALWIDTH) /
GetDeviceCaps(TWinPrinter(Printer).Handle, LOGPIXELSX) * 25.4;
varMMY := GetDeviceCaps(TWinPrinter(Printer).Handle, PHYSICALHEIGHT) /
GetDeviceCaps(TwinPrinter(Printer).Handle, LOGPIXELSY) * 25.4;
varVertSize := Trunc(varMMY) * 10;
varHorzSize := Trunc(varMMX) * 10;
SetMapMode(TwinPrinter(Printer).Handle, MM_LOMETRIC);
//Zeilenanzahl festlegen
varRow := (varVertSize - varHeaderSize - varFooterSize) div varRowSize;
varRow := varRow -1; // <--- om onderaan pagina plaats te hebben voor footer
//Seitenanzahl ermitteln
if Grid.RowCount mod varRow <> 0 then
varAnzSeiten := Grid.RowCount div varRow + 1
else
varAnzSeiten := Grid.RowCount div varRow;
varSeite := 1;
//Print Grid
for varP := 1 to varAnzSeiten do
begin
//Header
Printer.Canvas.Font.Name := 'Arial';
Printer.Canvas.Font.Style := []; //[fsBold];
Printer.Canvas.Font.Height := 68; //48; //aangepast
Printer.Canvas.TextOut((varHorzSize div 2 -
(Printer.Canvas.TextWidth(Title) div 2)),- 20,Title);
Printer.Canvas.Pen.Width := 5;
Printer.Canvas.MoveTo(0, - varHeaderSize);
Printer.Canvas.LineTo(varHorzSize, - varHeaderSize);
//Footer
Printer.Canvas.MoveTo(0, - varVertSize + varFooterSize);
Printer.Canvas.LineTo(varHorzSize, - varVertSize + varFooterSize);
Printer.Canvas.Font.Height := 56; //36; // aangepast
varFooter := 'Pagina: ' + IntToStr(varSeite) + ' van ' + IntToStr(varAnzSeiten);
Printer.Canvas.TextOut((varHorzSize div 2 - (Printer.Canvas.TextWidth(varFooter) div 2)),
- varVertSize + 150,varFooter);
//Print Row
Printer.Canvas.Font.Height := varFontHeight;
varYPos := varHeaderSize + 10;
// *** volgende dient om op tweede pagina ook de hoofding (namen) te zetten ***
varXPos := 400;//0; //aangepast volgens de ruimte links v.d. kolom en bladrand
// druk de namen van de spelers af bovenaan elke pagina
for varJ := 0 to Grid.ColCount - 1 do
begin
Printer.Canvas.TextOut(varXPos, - varYPos, Grid.Cells[varJ, 0]); // <-- dit zou dan je eerste regel printen
varXPos := varXPos + Grid.ColWidths[varJ] * 3;
end;
varYPos := varYPos + varRowSize;
// **********
for varI := 1 to varRow do
begin
if Grid.RowCount >= varI + (varSeite - 1) * varRow + 1 then
begin
varXPos := 400; //0; //aangepast volgens de ruimte links v.d. kolom en bladrand ;
for varJ := 0 to Grid.ColCount - 1 do
begin
Printer.Canvas.TextOut(varXPos, - varYPos,
Grid.Cells[varJ, varI + (varSeite - 1) * varRow +1 -1]);
varXPos := varXPos + Grid.ColWidths[varJ] * 3;
end;
varYPos := varYPos + varRowSize;
end;
end;
//Seite hinzufügen
Inc(varSeite);
if varSeite <= varAnzSeiten then Printer.NewPage;
end;
Printer.EndDoc;
end;
Bookmarks