procedure TfrmMain.btnPrintUsersClick(Sender: TObject);
var
sName,
SQL, sRole, sUSR_Nr, sDSC, sACTIVE_DT, sDate :
String;
PageWidth,PageHeight, cv, vv,
cc: Integer;
P, I, J, YPos, XPos, HorzSize, VertSize: Integer;
zeile, x, y: integer;
breite, hoehe, randlinks, randoben,wievielgedruckt: integer;
iCount:Integer;
zeile_im_grid, gedruckte_zeile : Integer;
zeilenhoehe, position_in_zeile : Int64;
spalte_im_grid : Integer;
my_rect : TRect;
rueckgabe : Integer;
spaltenbreite :
Array Of Integer;
mmx, mmy: Extended;
Footer:
string;
AnzSeiten, Seite, Zeilen, HeaderSize, FooterSize, ZeilenSize, FontHeight: Integer;
begin
//Kopfzeile, Fußzeile, Zeilenabstand, Schriftgröße festlegen
HeaderSize := 100;
FooterSize := 200;
ZeilenSize := 36;
FontHeight := 36;
wievielgedruckt := 0;
sDate := DateToStr(date());
Printer.Orientation := TPrinterOrientation(poPortrait);
Printer.BeginDoc;
//Druck auf mm einstellen
mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) /
GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4;
mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) /
GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4;
VertSize := Trunc(mmy) * 10;
HorzSize := Trunc(mmx) * 10;
SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC);
try
Printer.Title:='
Benutzerliste';
Printer.Canvas.Font.
Name:='
Arial';
Printer.Canvas.Brush.Color:=clwhite;
Printer.Canvas.Font.Height:=50;
Printer.Canvas.Font.Style := [fsBold];
Printer.Canvas.TextOut(1500, -300, '
Datum:');
Printer.Canvas.TextOut(1650, -300, sDate);
Printer.Canvas.TextOut(500, -350,'
Liste der aktiven Benutzer in BAForms');
Printer.Canvas.TextOut(495, -400,'
---------------------------------------------------------');
//Spalten-name platzieren
//Zeilenanzahl festlegen
Zeilen := (VertSize - HeaderSize - FooterSize)
div ZeilenSize;
//Seitenanzahl ermitteln
if DM.tblUsr.RecordCount
mod Zeilen <> 0
then
AnzSeiten := DM.tblUsr.RecordCount
div Zeilen + 1
else
AnzSeiten := DM.tblUsr.RecordCount
div Zeilen;
Seite := 1;
// Daten aus datenbank lesen - aktive benutzer
DM.tblUsr.Filter:= '
ACTIVE_Q <> ' + QuotedStr('
0');
DM.tblUsr.Filtered := True;
spalte_im_grid := -700;
Printer.Canvas.Font.Style := [];
Printer.Canvas.Font.Height:=40;
//DM.tblUsr.RecordCount-1
//seitennummerierung
Printer.Canvas.TextOut(100, -600 ,'
Username');
Printer.Canvas.TextOut(100, -650 ,'
-------------');
Printer.Canvas.TextOut(400, -600 ,'
Name');
Printer.Canvas.TextOut(400, -650 ,'
-------------');
Printer.Canvas.TextOut(900, -600 ,'
Rolle');
Printer.Canvas.TextOut(900, -650 ,'
----------');
Printer.Canvas.TextOut(1100, -600 ,'
Aktiviert am');
Printer.Canvas.TextOut(1100, -650 ,'
----------------');
//Grid Drucken
for P := 1
to AnzSeiten
do
begin
//Kopfzeile
Printer.Canvas.Font.Height := 48;
Printer.Canvas.TextOut((HorzSize
div 2 - (Printer.Canvas.TextWidth(Printer.Title)
div 2)),
- 20,Printer.Title);
Printer.Canvas.Pen.Width := 5;
Printer.Canvas.MoveTo(0, - HeaderSize);
Printer.Canvas.LineTo(HorzSize, - HeaderSize);
//Fußzeile
Printer.Canvas.MoveTo(0, - VertSize + FooterSize);
Printer.Canvas.LineTo(HorzSize, - VertSize + FooterSize);
Printer.Canvas.Font.Height := 36;
Footer := '
Seite: ' + IntToStr(Seite) + '
von ' + IntToStr(AnzSeiten);
Printer.Canvas.TextOut((HorzSize
div 2 - (Printer.Canvas.TextWidth(Footer)
div 2)),
- VertSize + 150,Footer);
//Zeilen drucken
Printer.Canvas.Font.Height := FontHeight;
YPos := HeaderSize + 10;
for I := 1
to Zeilen
do
begin
if DM.tblUsr.RecordCount >= I + (Seite - 1) * Zeilen
then
begin
sUSR_Nr := DM.tblUsr.Fields[0].AsString;
sName := DM.tblUsr.Fields[1].AsString;
sRole := DM.tblUsr.Fields[2].AsString;
sACTIVE_DT := DM.tblUsr.Fields[4].AsString;
sDSC := DM.tblUsr.Fields[15].AsString;
Printer.Canvas.TextOut(100, spalte_im_grid , sName);
Printer.Canvas.TextOut(400, spalte_im_grid, sDSC);
Printer.Canvas.TextOut(900, spalte_im_grid , sRole);
Printer.Canvas.TextOut(1100, spalte_im_grid , sACTIVE_DT);
wievielgedruckt := wievielgedruckt +1;
spalte_im_grid := spalte_im_grid -40;
DM.tblUsr.Next;
end;
end;
Inc(Seite);
if Seite <= AnzSeiten
then begin
Printer.NewPage;
spalte_im_grid := -200;
Printer.Canvas.TextOut(100, -200 ,'
Username');
Printer.Canvas.TextOut(100, -250 ,'
-------------');
Printer.Canvas.TextOut(400, -200 ,'
Name');
Printer.Canvas.TextOut(400, -250 ,'
-------------');
Printer.Canvas.TextOut(900, -200 ,'
Rolle');
Printer.Canvas.TextOut(900, -250 ,'
----------');
Printer.Canvas.TextOut(1100, -200 ,'
Aktiviert am');
Printer.Canvas.TextOut(1100, -250 ,'
----------------');
end;
end;
Printer.EndDoc;
Printer.Free;
EXCEPT
on E: EDatabaseError
do ShowMessage(E.
Message);
ELSE
Application.MessageBox('
Drucken fehlgeschlagen!', '
Fehler!');
END;
end;