|
Registriert seit: 15. Mär 2005 Ort: Bous 15 Beiträge |
#1
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: ![]() ![]() 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: ![]() ![]() 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 |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |