Autor Beitrag
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: So 25.03.07 19:18 
Hallo.

In meinem jetzigen Programm habe ich als erstes Mal TPrinter, statt TForm.Print benutzt. Ich habe jetzt die Zahlen genommen, die für das Drucken der Captions diverser Labels mit Acrobat Distiller ideal sind.
Dann habe ich die chemische Formel mal mit HP DeskJet 895Cxi gedruckt.
Da waren die tiefgestellten Basis-Zahlen viel weiter unten.
Man hat richtig gesehen, dass der HP DeskJet 895Cxi eine viel höhere Auflösung hat, als Adobe Acrobat Distiller.

Nun meine Frage:

Wie bekomme ich heraus, welche Auflösung - wie viel Punkte er nach unten und nach rechts füllen kann, um auf ein Pixel auf dem Monitor zu kommen - der aktuelle Drucker hat?

Bei Acrobat Distiller waren es ja so zwölf.

Oder zur Not:

Welche Auflösung der HP DeskJet 895Cxi hat?

Wäre für eine Antwort sehr dankbar.


Jakob Ullmann.


PS: Weil ich vor kurzem so ein Thema gesehen habe:
Im Delphi-Hilfefile habe ich schon geguckt - aber nichts gefunden.
Shorty
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 107

Win XP, Ubuntu 8.04
Delphi 7 Prof., Delphi 2005 Pers.
BeitragVerfasst: So 25.03.07 20:26 
Guck dir mal das hier an, da wird anhand eines StringGrids gezeigt, wie man Texte in Millimetern auf einem Drucker ausrichten kann. Das wird dann mithilfe der Funktion GetDeviceCaps der Windows-API gemacht, solltest du dir auch mal in der Windows-Hilfe von Delphi angucken!
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Di 27.03.07 17:29 
Tut mir leid, aber:
Ich habe leider nichts verstanden.

Außerdem geht es bei mir eigentlich nicht um ein StringGrid (habe noch nie damit gearbeitet).

Sondern darum:

Ich habe ein paar Labels (16).
Diese können die Schriftgröße 16 oder 26 haben, zwei verschiedene Höhen und alle Schriftarten bzw. Styles
(fsBold]...).
Diese sollen im Modus Printer.Canvas.TextOut(anonym,anonym,jeweiliger Label.Caption) an den Drucker gehen und dann
mit Printer.EndDoc; gedruckt werden.

Also:
- möglich, dass es daraus hervor geht
- evtl. nicht kapiert

Wenn jemand mir es erklären könnte oder mein Problem direkt lösen könnte, wäre das ganz toll. :wink:

Jakob U.
Backslash
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 202

WIN XP
Delphi 5 Ent, Delphi 2005 Prof
BeitragVerfasst: Di 27.03.07 18:08 
guckst du hier www.delphi-library.d...iewtopic.php?t=71392.

Das Tutorial stammt übrigens von mir. Wenn dann noch fragen sind, stell sie ruhig.

Font.Size gibt nicht die Größe auf dem Drucker aus. Dafür ist der Wert Font.Height zuständig. Das ist die Höhe in Pixeln auf dem Canvas.

Um die Höhe zu ermitteln, die der Text auf dem Drucker benötigt gibt es zwei Möglichkeiten:

1. Printer.Canvas.TextHeight (gibt die Höhe des Textes in Pixel zurück - Achtung: Dieser Wert wird in der Funtion jedes Mal aufs Neue berechnet)

2. Printer.Canvas.Font.Height (gibt die Höhe der benötigten Pixel zurück - Hinweis: Der Wert ändert sich nur wenn du die Schriftart oder Größe (Size) änderst)

Wichtig: Printer.Pageheight und Printer.Pagewidth geben dir wie du sicher schon weißt die Maximalhöhe und Breite des bedruckbaren Bereichs zurück. Im Zusammengang mit der Texthöhe kannst du die Seite eigentlich fehlerfrei bedrucken ohne das Probleme bestehen.

Ansonsten verweise ich auf mein Tutorial. Ich hoffe dass das alle deine Fragen beantwortet.

Viele Grüße

Backslash
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Do 29.03.07 18:12 
Um ehrlich zu sein, habe ich nicht gewusst, dass Printer.PageWidth/-Height die Höhe/Breite der Seite angeben.
Ich nehme an, es sind die Drucker-Pixel.
Ansonsten: Danke! Sehr hilfreich!
Auch ein Klasse-Tutorial. Wobei ich mir nur Abschnitt 2 - der war's, glaub' ich - durchgelesen habe.
Also: Wenn ich dieses Tutorial betrachte, würde ich sagen, du bist ein Spitzen-Autor.

Vielen Dank

Jakob Ullmann