Registriert seit: 15. Mär 2005
Ort: Bous
15 Beiträge
|
Ausdruck funktioniert nicht auf jedem Drucker
6. Okt 2006, 09:15
Hallo.
Ich hab ein ziemlich blödes Problem mit meiner Druck-Prozedur.
Erstmal ein wenig Code...
Delphi-Quellcode:
procedure GridDruck(links,oben,vSpalte,bSpalte,vZeile,bZeile:integer; scal:double; farbig:boolean);
var
x,y,li,ob,re,un,waag,senk,a:integer;
fix,grund,schrift:TColor;
r:Trect;
eich_bild: TBitmap;
function rech(i,j:integer):integer;
begin
result:=round(((i*j) / 72) * scal);
end;
begin
if maengel.data_grid.Cells[3,16]='' then
begin
maengel.data_grid.RowCount:=16;
//////////////////////////////////////////1-Seiten-Version///////////////////////////////////////
if vZeile < 0 then vZeile:=0;
if vSpalte < 0 then vSpalte:=0;
if (bZeile >= maengel.data_grid.rowcount)or(bZeile < 0) then
bZeile:=maengel.data_grid.rowcount - 1;
if (bSpalte >= maengel.data_grid.colcount)or(bSpalte < 0) then
bSpalte:=maengel.data_grid.colcount - 1;
if vZeile > bZeile then
begin
a:=vZeile;vZeile:=bZeile;bZeile:=a;
end;
if vSpalte > bSpalte then
begin
a:=vSpalte;vSpalte:=bSpalte;bSpalte:=a;
end;
if (scal > 0)and(vZeile < maengel.data_grid.rowcount)and(vSpalte < maengel.data_grid.colcount) then
begin
if farbig then
begin
fix:=clwhite;
grund:=maengel.data_grid.color;
schrift:=maengel.data_grid.font.color;
end
else
begin
fix:=clwhite;
grund:=clwhite;
schrift:=clblack;
end;
waag:=getdevicecaps(printer.handle,logpixelsx);
senk:=getdevicecaps(printer.handle,logpixelsy);
links:=rech(links,waag);
oben:=rech(oben, senk);
li:=getdevicecaps(printer.handle,physicaloffsetx)+1+links;
a:=rech(3,waag);
with printer do begin
BeginDoc;
//------------------------------------------------------------------------------------//
Printer.Canvas.Font.Name:='Arial';
Printer.Canvas.Brush.Color:=clWhite;
Printer.Canvas.Font.Size:=14;
Printer.Canvas.Font.Style:=[fsBold];
Canvas.TextOut(300,200,'Bautagesbericht Schleifarbeiten vom '+maengel.datum_text.text);
Printer.Canvas.Font.Style:=[];
//------------------------------------------------------------------------------------//
Printer.Canvas.Font.Size:=10;
Printer.Canvas.Font.Style:=[fsBold];
Canvas.TextOut(300,600,'Maschine: '+mach_buf2);
Canvas.TextOut(300,700,'AG');Printer.Canvas.Font.Style:=[];Canvas.TextOut(1400,700,maengel.ag_text.text);Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(2700,700,'Datum');Printer.Canvas.Font.Style:=[];Canvas.TextOut(3100,700,maengel.datum_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(300,800,'Strecke');Printer.Canvas.Font.Style:=[];Canvas.TextOut(1400,800,maengel.strecke_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(2700,800,'Bst.Nr.');Printer.Canvas.Font.Style:=[];Canvas.TextOut(3100,800,maengel.baustnr_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(300,900,'Gleis');Printer.Canvas.Font.Style:=[];Canvas.TextOut(1400,900,maengel.gleis_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(300,1000,'ausgeführte Leistung');Printer.Canvas.Font.Style:=[];Canvas.TextOut(1400,1000,maengel.leistung_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(2700,1000,'von km');Printer.Canvas.Font.Style:=[];Canvas.TextOut(3100,1000,maengel.startkm_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(3500,1000,'bis km');Printer.Canvas.Font.Style:=[];Canvas.TextOut(3900,1000,maengel.endkm_text.text);
//------------------------------------------------------------------------------------//
if maengel.data_grid.gridlinewidth > 0 then
begin
canvas.pen.color:=$333333;
canvas.pen.width:=2;
canvas.pen.style:=pssolid
end
else
canvas.pen.style:=psclear;
canvas.font:=maengel.data_grid.font;
canvas.font.color:=schrift;
canvas.font.size:=8;
for x:=vSpalte to bSpalte do
begin
ob:=getdevicecaps(printer.handle,physicaloffsety)+1+oben;
re:=li+rech(maengel.data_grid.ColWidths[x]+1,waag);
for y:=vZeile to bZeile do
begin
un:=ob+rech(maengel.data_grid.RowHeights[y]+1,senk);
if (x < maengel.data_grid.fixedcols)or(y < maengel.data_grid.fixedrows) then
canvas.brush.color:=fix
else
canvas.brush.color:=grund;
canvas.rectangle(li,ob,re+2,un+2);
r:=rect(li+a,ob+1,re-a,un-2);
drawtext(canvas.handle,pchar(maengel.data_grid.Cells[x,y]),length(maengel.data_grid.Cells[x,y]),
r,DT_SINGLELINE or DT_VCENTER);
ob:=un;
end;
li:=re;
end;
//------------------------------------------------------------------------//Logo
eich_bild:=TBitmap.Create;
eich_bild.LoadFromResourceName(hInstance,'pic1');
if option_form.print_logo_out.Checked then
Printer.Canvas.Draw(3550,50,eich_bild);
//------------------------------------------------------------------------// linke Seite
Printer.Canvas.Font.Size:=10;
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(300,3750,'TA (Einsatzzeit in h):');Printer.Canvas.Font.Style:=[];Canvas.TextOut(1350,3750,maengel.einsatz_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(300,3900,'TS (Rüstzeit in h):');Printer.Canvas.Font.Style:=[];Canvas.TextOut(1350,3900,maengel.ruest_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(300,4050,'WT (Funkenzeit in h):');Printer.Canvas.Font.Style:=[];Canvas.TextOut(1350,4050,maengel.funken_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(300,4200,'TT (Fahrzeit in h):');Printer.Canvas.Font.Style:=[];Canvas.TextOut(1350,4200,maengel.fahrzeit_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(300,4350,'TW (Wartezeit in h):');Printer.Canvas.Font.Style:=[];Canvas.TextOut(1350,4350,maengel.warte_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(300,4500,'MD (Maschinendefekt):');Printer.Canvas.Font.Style:=[];Canvas.TextOut(1350,4500,maengel.madef_text.text);
//------------------------------------------------------------------------// rechte Seite
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(1900,3750,'Schleifmeter:');Printer.Canvas.Font.Style:=[];Canvas.TextOut(2550,3750,maengel.schlmet_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(1900,3900,'Fertigmeter:');Printer.Canvas.Font.Style:=[];Canvas.TextOut(2550,3900,maengel.fertigmet_text.text);
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(1900,4050,'Bemerkungen:');Printer.Canvas.Font.Style:=[];
Canvas.TextOut(2550,4050,maengel.bem_text.Lines[0]);
Canvas.TextOut(2550,4150,maengel.bem_text.Lines[1]);
Canvas.TextOut(2550,4250,maengel.bem_text.Lines[2]);
Canvas.TextOut(2550,4350,maengel.bem_text.Lines[3]);
Canvas.TextOut(2550,4450,maengel.bem_text.Lines[4]);
Canvas.TextOut(2550,4550,maengel.bem_text.Lines[5]);
//------------------------------------------------------------------------// CheckBoxen
Printer.Canvas.Font.Style:=[fsBold];Canvas.TextOut(300,4750,'vorhandene Schienenfehler:');Printer.Canvas.Font.Style:=[];
Canvas.TextOut(300,4900,'Shellings');
Canvas.TextOut(300,5000,'Wellen');
Canvas.TextOut(300,5100,'senkr. Abnutzung');
Canvas.TextOut(300,5200,'Einsenkung');
Canvas.TextOut(1400,4900,'Head-Checks');
Canvas.TextOut(1400,5000,'waager. Risse');
Canvas.TextOut(1400,5100,'senkr. Risse');
Canvas.TextOut(1400,5200,'Korrosion');
Canvas.TextOut(2400,4900,'Riffel');
Canvas.TextOut(2400,5000,'Abblätterung');
Canvas.TextOut(2400,5100,'Schleuderstellen');
Canvas.TextOut(2400,5200,'seitl. Abnutzung');
Canvas.TextOut(3500,4900,'Verquetschungen');
Canvas.TextOut(3500,5000,'Oberflächenrisse');
Canvas.TextOut(3500,5100,'Sonstiges');
Printer.Canvas.Font.Style:=[fsBold];
Canvas.TextOut(4350,5100,'[ ]');
Printer.Canvas.Font.Style:=[];
Canvas.TextOut(300,5400,'Bedenken f. Durchführung:');
Canvas.TextOut(2400,5400,'Behinderung b. Durchführung:');
Printer.Canvas.Font.Size:=12;
Canvas.TextOut(300,5650,'Unterschrift');
Printer.Canvas.Font.Style:=[fsBold];
Canvas.TextOut(300,6050,'________________________________');
Canvas.TextOut(2500,6050,'________________________________');
Printer.Canvas.Font.Size:=8;
Canvas.TextOut(300,6190,'Datum');Canvas.TextOut(1300,6190,'AN');
Canvas.TextOut(2500,6190,'Datum');Canvas.TextOut(3500,6190,'AG');
Printer.Canvas.Font.Size:=10;Printer.Canvas.Font.Style:=[];
if maengel.chk_shellings.Checked then
Canvas.TextOut(1100,4900,'[X]') else Canvas.TextOut(1100,4900,'[ ]');
if maengel.chk_wellen.Checked then
Canvas.TextOut(1100,5000,'[X]') else Canvas.TextOut(1100,5000,'[ ]');
if maengel.chk_abnutz.Checked then
Canvas.TextOut(1100,5100,'[X]') else Canvas.TextOut(1100,5100,'[ ]');
if maengel.chk_einsenk.Checked then
Canvas.TextOut(1100,5200,'[X]') else Canvas.TextOut(1100,5200,'[ ]');
if maengel.chk_headchk.Checked then
Canvas.TextOut(2100,4900,'[X]') else Canvas.TextOut(2100,4900,'[ ]');
if maengel.chk_waagri.Checked then
Canvas.TextOut(2100,5000,'[X]') else Canvas.TextOut(2100,5000,'[ ]');
if maengel.chk_senkri.Checked then
Canvas.TextOut(2100,5100,'[X]') else Canvas.TextOut(2100,5100,'[ ]');
if maengel.chk_korro.Checked then
Canvas.TextOut(2100,5200,'[X]') else Canvas.TextOut(2100,5200,'[ ]');
if maengel.chk_riff.Checked then
Canvas.TextOut(3200,4900,'[X]') else Canvas.TextOut(3200,4900,'[ ]');
if maengel.chk_abbl.Checked then
Canvas.TextOut(3200,5000,'[X]') else Canvas.TextOut(3200,5000,'[ ]');
if maengel.chk_schleud.Checked then
Canvas.TextOut(3200,5100,'[X]') else Canvas.TextOut(3200,5100,'[ ]');
if maengel.chk_seitlab.Checked then
Canvas.TextOut(3200,5200,'[X]') else Canvas.TextOut(3200,5200,'[ ]');
if maengel.chk_verq.Checked then
Canvas.TextOut(4350,4900,'[X]') else Canvas.TextOut(4350,4900,'[ ]');
if maengel.chk_oberflri.Checked then
Canvas.TextOut(4350,5000,'[X]') else Canvas.TextOut(4350,5000,'[ ]');
if maengel.beddurch_yes.Checked then
Canvas.TextOut(1400,5400,'ja[X] nein[ ]') else Canvas.TextOut(1400,5400,'ja[ ] nein[X]');
if maengel.durchf_yes.Checked then
Canvas.TextOut(3650,5400,'ja[X] nein[ ]') else Canvas.TextOut(3650,5400,'ja[ ] nein[X]');
enddoc;
maengel.data_grid.RowCount:=36;
end;
end;
end;
Wenn alles richtig klappt sieht der Ausdruck folgendermaßen aus:
http://img396.imageshack.us/img396/6...derngd0.th.jpg
Leider sieht es nur auf (den mir verfügbaren) Druckern HP Laserjet 2300n, Oki C5450 und nem HP Photodrucker (Name vergessen, ist aber Tintenspritzer) so aus.
Auf allen anderen sieht es ziemlich genau SO aus:
http://img370.imageshack.us/img370/2...dernaf0.th.jpg
Es sieht aus als ob auf manchen Druckern die Dimensionen völlig anders sind.
Alle meine Versuche über den Druckertreiber was zu ändern sind fehlgeschlagen und es liegt auch nicht daran, das das eine Laser und das andere Tintenstrahler sind.
Falls jemand ne Idee hat, wie man das korrigieren könnte das es auf allen Druckern "richtig" aussieht, immer her damit - ich weiß nicht was ich noch ändern soll.
Vielleicht (oder sehr wahrscheinlich) gibt es einen andern Code zum Drucken, bei dem das Problem nicht auftritt...
Vielen Dank schonmal fürs Drübernachdenken.
Grüße
hitmiccs
If anything can go wrong, it will !
Murphy's Law
|