Entwickler-Ecke

Sonstiges (Delphi) - Wie genau bekomme ich maximale x-Auflösung eines Druckers??


Rag3 - Mo 04.04.05 13:01
Titel: Wie genau bekomme ich maximale x-Auflösung eines Druckers??
hi,
ich möchte gerne ein bild ausdrucken, das funktioniert auch so weit, nur, dass ich trotz einiger forumbeiträge nicht dahinter komme, wie ich das bild der druckauflösung des individuellen druckers anpasse...
meine druckprozedur sieht bis jetzt so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TFFunktionsgraph.BDruckenClick(Sender: TObject);
var Druckgroesse:trect;
begin
  if PdBilddrucken.execute then
    begin
      Printer.BeginDoc;
        Druckgroesse.Left:=0;
        Druckgroesse.Top:=0;
        Druckgroesse.Right:=GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX);
        Druckgroesse.Bottom:=round(Druckgroesse.Right*3/4);
        Printer.Canvas.Stretchdraw(Druckgroesse,IFunktionsgraph.Picture.Graphic);
      Printer.enddoc;
    end;
end;


wie aus dem quelltext hervorgeht möchte ich nur die x-pixel ausrechnen, die y-pixel werden der auflösung des images entsprechend berechnet (800/600=4/3), was muss ich zu der getdevicecaps noch dazumachen?

Kann man das Bild evtl auch im querformat ausdrucken, wenn ja wie?

danke für die hilfe

Rag3


Pierre - Di 05.04.05 20:30

Hallo,


Delphi-Quelltext
1:
2:
3:
4:
5:
Printer.Orientation := poPortrait; // Hochformat -> quer heißt glaube ich ?landscape?
xmm:=trunc(Printer.PageWidth/210); // Korrekturfaktor DIN-A4 in mm
ymm:=trunc(Printer.PageHeight/296);// Korrekturfaktor DIN-A4 in mm
SetMapMode(printer.canvas.Handle,MM_ANISOTROPIC); // Punktauflösung auf Papier
SetMapMode(printer.canvas.Handle,MM_LOMETRIC); // mm-auflösung auf Papier


Ich hoffe, es hilft.
Gruß Pierre

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.


MisterBum - Mi 06.04.05 14:21

An welche Stelle muss den


Delphi-Quelltext
1:
2:
SetMapMode(printer.canvas.Handle,MM_ANISOTROPIC); // Punktauflösung auf Papier
SetMapMode(printer.canvas.Handle,MM_LOMETRIC); // mm-auflösung auf Papier

im Code? Bei mir kommt immer die Meldung 'Drucker druckt aktuell nicht'.

Ne Idee?...

So sieht es bei mir aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
printer := TPrinter.Create;
      Printer.Orientation := poPortrait; // Hochformat
      SetMapMode(printer.canvas.Handle,MM_LOMETRIC); // mm-auflösung auf Papier
      Printer.Canvas.Font := LabeledEdit1.Font;
      Printer.Canvas.Font.Height := 10;

      Printer.BeginDoc;


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


Rag3 - Do 07.04.05 19:48

ich habs mittlerweile hinbekommen, hier mal mein druckenquellcode, daran kannst du bestimmt erkennen, wo dein fehler liegt!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if Printdoalog1.execute then
begin
  Printer.BeginDoc;
    Druckgroesse.Left:=0;
    Druckgroesse.Top:=0;
    Druckgroesse.Right:=GetDeviceCaps(Printer.Canvas.Handle, horzres); //gibt die horizontale Auflösung des Druckers in Pixel an
    Druckgroesse.Bottom:=round(Druckgroesse.Right*3/4); //Nur, weil ich ein Bild mit Seitenverhältnis 3 zu 4 habe
    Printer.Canvas.Stretchdraw(Druckgroesse,IBild.Picture.Graphic); // Hier wird mein bild auf die Druckauflösung ausgedehnt
  Printer.enddoc;
end;


mfg


MisterBum83 - Do 07.04.05 19:51

Kannst du mir vielleicht die ganze procedure mal posten?

Gruß und Dank
MisterBum