Einzelnen Beitrag anzeigen

Benutzerbild von hitmiccs
hitmiccs

Registriert seit: 15. Mär 2005
Ort: Bous
15 Beiträge
 
#1

Ausdruck funktioniert nicht auf jedem Drucker

  Alt 6. Okt 2006, 08: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
  Mit Zitat antworten Zitat