Ich wollte heute für ein Programm einfache Druckmöglichkeiten umsetzen, aber Pustekuchen. Ich habe Win7x64 und Lazarus 0.9.28 x86. Als Drucker habe ich den PDF-Creator 0.9.9 installiert und als Standard-Drucker festgelegt. Doch sobald ich versuche was auszudrucken, bekomme ich eine AV, egal welchen Weg ich einschlage. Alles, was in sämtlichen Beispielen funktioniert, geht bei mir einfach nicht...könnte mir die Haare...Auch wenn ich nur sage Printer.index:=-1; (Was angeblich den Standard-Drucker auswählen soll), bekomme ich schon eine AV.
Und nun die Frage aller Fragen: Bin ich einfach nur zu blöd, oder muss man in Win7 etwas anders machen???
Wens interessiert, auf diese beiden Weisen hab ichs probiert:
1.:
Code: Alles auswählen
procedure blablabla;
var
Datei:Textfile;
s,oldfont:string;
i:dword;
begin
printer.index:=-1;
printer.BeginDoc;
oldFont := Printer.Canvas.Font.Name;
Printer.Canvas.Font.Name := 'Courier New';
printer.Canvas.Font.Height:=10;
i:=0;
try
with StringGrid1 do begin
printer.BeginDoc;
s:=Format('%-30s %-25s %-5s %-30s %-12s %-7s %-7s %-30s',[Cells[0,0], Cells[1,0], Cells[2,0], Cells[3,0], Cells[4,0], Cells[5,0], Cells[6,0], Cells[7,0]]);
printer.Canvas.TextOut(0,i*20+20,s);
s:=Format('%-80s', ['---------------------------------------------------------']);
for i := 1 to RowCount - 1 do begin
s:=Format('%-30s %-25s %-5s %-30s %-12s %-7s %-7s %-30s',[Cells[0,i], Cells[1,i], Cells[2,i], Cells[3,i], Cells[4,i], Cells[5,i], Cells[6,i], Cells[7,i]]);
printer.Canvas.TextOut(0,i*20,s);
end
end;
printer.EndDoc;
finally
Printer.Canvas.Font.Name := oldFont;
end;
end;
Code: Alles auswählen
procedure blablabla;
var
w,v : TSize;
OUTDC : HDC;
zeile : Integer;
s : string;
groesse,i:longInt;
const
maxZeilen = 60; // Zeilen pro Seite
textHoehe = 40; // 4 mm
linkerRand = 200; // 20 mm
begin
Printer.BeginDoc;
outDC := Printer.Canvas.Handle;
SetMapMode(OutDC,mm_lometric);
GetWindowExtEx(OutDC,w);
GetViewportExtEx(OutDC,v);
SetMapMode(OutDC,MM_ANISOTROPIC);
SetWindowExtEX(OutDC,w.cx,w.cy,nil);
SetViewPortExtEx(OutDC,v.cx,-v.cy,nil);
Printer.Canvas.Font.Name := 'Courier New';
Printer.Canvas.Brush.Color := clWhite; // Hintergrundfarbe
Printer.Canvas.Font.Height:= textHoehe;
zeile := 0;
groesse:=STringgrid1.RowCount;
while i<groesse do begin
Inc(zeile,1);
if zeile = maxZeilen then begin
zeile := 0;
Printer.NewPage
end;
if zeile = 0 then begin
Printer.Canvas.Font.Style := [fsBold];
Printer.Canvas.TextOut(linkerRand,0,'Seite: ' + IntToStr(Printer.PageNumber));
inc(Zeile);
with stringgrid1 do begin
s:=Format('%-30s %-25s %-5s %-30s %-12s %-7s %-7s %-30s',[Cells[0,0], Cells[1,0], Cells[2,0], Cells[3,0], Cells[4,0], Cells[5,0], Cells[6,0], Cells[7,0]]);
end;
Printer.Canvas.TextOut(linkerRand, zeile * (textHoehe + 3), s);
Printer.Canvas.Font.Style := []
end;
with stringgrid1 do begin
s:=Format('%-30s %-25s %-5s %-30s %-12s %-7s %-7s %-30s',[Cells[0,i], Cells[1,i], Cells[2,i], Cells[3,i], Cells[4,i], Cells[5,i], Cells[6,i], Cells[7,i]]);
end;
Printer.Canvas.TextOut(linkerRand, zeile * (textHoehe + 3), s);
inc(i,1);
end;
Printer.EndDoc
end;