AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ausdruck funktioniert nicht auf jedem Drucker
Thema durchsuchen
Ansicht
Themen-Optionen

Ausdruck funktioniert nicht auf jedem Drucker

Ein Thema von hitmiccs · begonnen am 6. Okt 2006 · letzter Beitrag vom 6. Okt 2006
 
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
 


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz