Announcement

Collapse
No announcement yet.

Stufenslose Skalierung der Schiften in einer Druckvorschau

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Stufenslose Skalierung der Schiften in einer Druckvorschau

    Zur Zeit arbeite ich an der Realisierung einer eigenen Druckvorschau.
    Der Drucktext wird (in verschiedenen Schriftgrößen und Schriftdicken) direkt über die Funktion Canvas.TextOut auf das Image.Canvas geschrieben und angezeigt.
    Das Problem dabei entsteht, wenn die Schriftgrößen entsprechend der Skalierung umgerechnet werden. Existiert für die neu berechnete Schriftgröße keine entsprechende Windows Standardschrift, wird automatisch eine Schrift verwendet, die der berechneten am nächsten kommt. Dadurch verschieben sich vor allem bei längeren Textzeilen die Verhältnisse der original Positionen. z.B. ist plötzlich meine original Zeile: Länge 100 Zeichen/Größe 10 kürzer wie die Zeile 100/Größe 8!!!!
    Kann mir da vielleicht jemand weiterhelfen?!?

    Sandra

  • #2
    Hallo Sandra,

    mache dir die Sache ja nicht so kompliziert, wie oben beschrieben. Der einfachste Weg für eine Druckvorschau führt m.e. nach über StretchBlt und Konsorten. Mache erst deine Druckausgabe auf den DruckerDC (oder einen temporären der die gleichen Eigenschaften wie der DrckerDC hat) und mit StretchBlt kopierst du die Bitmap von da auf einen angezeigten DC (z.b. image1.canvas) Dabei wird die Bitmap automatisch vergrößert oder verkleinert. Für Druckvorschauen ist das allemal ausreichend. Noch einfacher ist der Einsatz von Komponenten die für Bildverarbeitung spezialisiert sind (LEAD, LightLib u.ä.), die dann aber ein Projekt ganz schön aufblähen können. Dafür hast du dann auch kaum noch arbeit mit scrolling, zooming und anderen "Kleinigkeiten"

    Comment


    • #3
      tag sandra, tag michael,

      wie programmiert man ganz generell eine druckvorschau???
      ich habe ein Visitenkartenprogramm programmiert. eine visitenkarte ist eine groupbox. auf dieser
      groupbox sind labels und eine image-komponente. jetzt hätte ich gerne eine druckvorschau und eine
      druckfunktion, die die visitenkarte(groubox) mit labels und image möglichst oft (ca. 12 mal)
      anzeigt bzw. ausdruckt. aber wie geht man da vor?????

      mfg

      marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Hallo Sandra

        Das Zoomen bringt man sehr schön hin mit SetViewPortEx und SetWindowExtEx (in der Paint Methode). Damit ist aber das Problem mit dem FontMapper noch nicht vom Tisch. Zuerst wäre da mal das MapperFlag auszuschalten, das verbietet, das Breiten-/Höhenverhältnis zu ändern ( SetMapperFlags(HDC hdc, DWORD dwFlag {0 oder 1}); ). Dann gibts seitenlange Beschreibungen, wie man die Breite der Schrift device-unabhängig bestimmen kann (www.msdn.com/default.asp oder so...). Eine solche Schrift kann man dann auch nicht mehr mit TFont erstellen, da Delphi die Breite böswilligerweise immer auf 0 (=Defaultbreite) setzt.
        Eine weitere Möglichkeit, die mehr dem WYSIWYNG (N=Never) entspricht, ist sich die Positionen der Zeichen zu ermitteln (GetTextExtentExPoint, GetCharABCWidthsFloat) und dann die Zeichen an den entsprechenden Positionen auszugeben (somit können sich die Rundungsfehler nicht aufaddieren).

        Gruss, Ren&#233

        Comment

        Working...
        X