Entwickler-Ecke

Multimedia / Grafik - Quadrat in cm ausdrucken


Delete - Di 26.02.19 06:39
Titel: Quadrat in cm ausdrucken
- Nachträglich durch die Entwickler-Ecke gelöscht -


Ralf Jansen - Di 26.02.19 11:42

600 DPI sollte einfach die Auflösung eines bestimmten Druckers sein. Die solltest du über GetDeviceCaps bekommen können, möglicherweise rückt die VCL das auch irgendwo direkt raus.


Delete - Di 26.02.19 13:46

- Nachträglich durch die Entwickler-Ecke gelöscht -


Holgerx - Di 26.02.19 15:52

Hmm..

Wenn Du einfach nur in mm ausdrucken möchtest (per Printer.BeginDoc/EndDoc):


https://www.delphipraxis.net/84132-drucken-mit-masseinheiten-cm.html

https://www.swissdelphicenter.ch/de/showcode.php?id=584

;)


Delete - Di 26.02.19 17:52

- Nachträglich durch die Entwickler-Ecke gelöscht -


Delete - Do 28.02.19 04:28

- Nachträglich durch die Entwickler-Ecke gelöscht -


Holgerx - Do 28.02.19 12:01

Hmm..

Habe mal deinen Source nach dem Muster von den Schweitzern umgestellt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
var
  r: TRect;
  s: WideString;
begin
  // # Einstellungen
  Printer.PrinterIndex := Printer.Printers.IndexOf('Microsoft XPS Document Writer');
  //Printer.PrinterIndex := 1;
  Printer.Canvas.Font.Name := 'MS Mincho';
  Printer.Canvas.Font.Size := 12;
  Printer.Canvas.Brush.Style := bsClear;

  // # Druckvorgang
  Printer.BeginDoc;
  SetMapMode(Printer.Handle, MM_LOMETRIC);  // <-- Muss anscheinend HINTER BeginDoc
  // Obere Zeile
  Printer.Canvas.Pen.Color := clBlue;
  Printer.Canvas.MoveTo(250, -250);  // alle Y-Werte Negativ, Positive Werte wandern nach links raus...
  Printer.Canvas.LineTo(1850, -250);
  // Mittlere Zeile
  Printer.Canvas.Pen.Color := clSilver;
  Printer.Canvas.MoveTo(250, -300);
  Printer.Canvas.LineTo(1850, -300);
  // Untere Zeile
  Printer.Canvas.Pen.Color := clBlue;
  Printer.Canvas.MoveTo(250, -350);
  Printer.Canvas.LineTo(1850, -350);
  // Text
  Printer.Canvas.Font.Color := clRed;
  s := #$3042;
  r := Rect(250, -250400, -400);
  DrawTextW(Printer.Canvas.Handle, PWideChar(s), Length(s), r, 0);
  Printer.EndDoc;


Und siehe da, es scheint zu funktionieren...


Delete - Do 28.02.19 16:27

- Nachträglich durch die Entwickler-Ecke gelöscht -


Holgerx - Do 28.02.19 20:39

Hmm..

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
In der Hilfe heißt es, positive Y-Werte wandern nach oben ("positive y is up"). Das führt etwas zur Verwirrung.


Und da ist denke ich das Problem:

Von Oben nach oben gehend ist raus aus dem Papier ;)

Eine Seite fängt immer oben links mit 0,0 an, wenn ich nun nach oben gehe, geht es aus der Seite heraus und es wird nichts auf das Blatt gedruckt.
Ist wirklich verwirrend, da es bei Pixel wohl von oben nach untern mit positiven Wert geht..

Wobei ja 'Y' eher von Rechts nach links lauten müsste..


Delete - Do 28.02.19 21:08

- Nachträglich durch die Entwickler-Ecke gelöscht -