Autor Beitrag
Rag3
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Mo 04.04.05 13:01 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138

Win 98se und XP prof
D5Pers und D7Prof
BeitragVerfasst: Di 05.04.05 20:30 
Hallo,

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107



BeitragVerfasst: Mi 06.04.05 14:21 
An welche Stelle muss den

ausblenden 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Do 07.04.05 19:48 
ich habs mittlerweile hinbekommen, hier mal mein druckenquellcode, daran kannst du bestimmt erkennen, wo dein fehler liegt!

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 245
Erhaltene Danke: 2

WIN XP
Delphi 6
BeitragVerfasst: Do 07.04.05 19:51 
Kannst du mir vielleicht die ganze procedure mal posten?

Gruß und Dank
MisterBum