Drucken


  • Administrator

    Grüsse Zusammen,

    Ja ich weiss, das Thema wurde glaub ich schon ein paar mal angesprochen, doch ich krieg es einfach nicht hin auch mit der Hilfe der mir bisher angeboten wurde, bzw. die ich gefunden habe.
    Umgebung:
    MDI mit MFC

    Problem:
    Ich habe eine Tabelle kreiert (eigener Code), welche man in Pixel erstellt. Also Höhe in Pixel, Breite, Länge, Text usw. alles in Pixel. Das ist ja der MapMode MM_TEXT. Jetzt ist es aber soweit, dass dies auch gedruckt werden muss. Dabei stosse ich auf verschiedentliche Probleme, welche mich langsam verzweifeln lassen. Schon nur, weil das Drucken der letzte Schritt in meiner Programmierung ist, und wenn der nicht eingebaut werden kann, mein ganzes über 2 Monatiges Projekt für die Katz war.

    Ich weiss es gibt CDC::GetDeviceCaps womit man z.b. die Auflösung holen kann. Auch Breite des Blattes usw. usf. Ich weiss das mein Bildschirm eine andere dpi hat als mein Drucker. Doch ich habe extrem mühe, mit all diesen Angaben, meine Integer Pixel Angaben zu skalieren. Oder ehrlich gesagt ich scheitere auf der vollen Linie.

    Ich schaffe den Umwandlungsprozess von MM_TEXT zu MM_HIMETRIC schon erst gar nicht. Und wenn ich dann mit unsauberen schätz Werten arbeite, kann ich mein Zeugs nicht auf dem Blatt zentrieren. Oder es mehr nach rechts zu setzen als nach links, damit es Platz für Ordnerlöcher hat. Und wenn ich dann in der Seitenansicht eine Druckervorschau anschauen möchte, dann klappt es hinten und vorne nicht mit dem Zoomen. Sondern das gezeichnete bleibt immer gleich gross und passt nur auf das Blatt bei einem Zoom von 100%.

    Ich bitte dringends um Hilfe. Sinnvolle Tutorial wie auch Code Schnippels sind sehr willkommen. Ich weiss das es gehen muss. Schliesslich kann Excel ja auch Tabellen Angaben in Pixel bearbeiten und dann perfekt drucken.

    Also nochmals zusammengefasst welche Probleme behoben werden sollten:
    1. Anpassen der Koordinaten und Grössen von MM_TEXT und Bildschirmausgabe zu MM_HIMETRIC und Druckerausgabe.
    2. Positionieren des gedruckten auf dem Blatt. Irgendwie mit Offset Werten oder sowas in der Richtung. Am besten natürlich mit Konstanten, wie Rechtsbündig oder sowas.
    3. Funktionierende Druckervorschau auch mit Zoom.

    Vielen Dank im voraus. Ich hoffe dringend, dass mir wer helfen kann. Wenn ihr weitere Infos dazu braucht, fragt!
    Grüssli



  • Ja, drucken ist nicht grade die einfachste Sache...
    http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/kap_c.htm


  • Administrator

    Nette Beschreibung zum Drucken. Für die Grundstrukturen des Druckens. Aber meine Fragen beantwortet es nicht.
    1. Es wird immer in MM_LOMETRIC gezeichnet und gearbeitet.
    2. Von Positionierung auf dem Blatt steht nirgendwo etwas.
    3. Auch vom Zoom bei der Druckvorschau wird nirgends was erwähnt.

    Desweiteren geht es bei diesem Anhang darum, dass Höhen-/Seitenverhältnis beizubehalten. Das ist aber nicht wirklich das was ich will. Ich will die Grösse beibehalten. Also wenn ich eine 12 Pixel grosse Schrift auf dem Bildschirm habe, welche ca. 3mm misst, dann auf dem Papier auch wieder ca. 3mm misst. Daher danke für den Link, hat sicher noch ein paar weitere interessante Sachen bei dem Zeugs, aber es beantwortet meine Fragen bei weitem nicht.
    Grüssli


  • Administrator

    Ich möchte ja nicht drängeln, aber möchte auch nicht, dass der Thread in Vergessenheit gerät. Deshalb schieb ich ihn mal wieder nach oben und bitte weiterhin um Hilfe. Hab immer noch keine Lösung gefunden und hab schon schlaflose Nächte ^^
    Grüssli



  • Das Problem ist, dass viel Rechnerei auf dich zukommt, für die wohl keiner ein einfaches Patentrezept hat und da bleibt man lieber still. 🙄

    Für die Umstellung auf Himetric sehe ich zwei Möglichkeiten:
    1.) Du änderst die Werte per Try&Error, bis es wieder passt - dann passt es auf Monitor und Ausdruck (was ja bei MM_TEXT nicht der Fall ist).
    2.) Du erarbeitest eine Umrechnungsformel für den Ausdruck und wendest die auf deine Koordinaten an.
    Dazu brauchst du einmal die Seitenbreite in echten Pixeln und einmal in logischen - dann kannst du Dreisatz anwenden.

    Ich habe bei irgendeinem Beispiel zum Listcontrol mal was dafür gesehen und schon auf Codeproject gesucht, aber es nicht gefunden. 😞


  • Administrator

    Na die genaue Formel ist ja nicht unbedingt nötig. Nur in etwa ein Richtung hinzuweisen wäre mir schon sehr viel Wert 😉
    Ich hab z.b. Rausgefunden, wenn ich in MM_TEXT bleibe, dann ist eine Skalierung mit 6.25 schon sehr hilfreich. Das sind im übrigen die dpi des Druckers durch die dpi des Bildschirms. Also 600 / 96. Kann man ja aber alles mit GetDeviceCaps holen.
    Aber schon dann stosse ich auf Probleme. Nämlich eben mit der Positionierung. Ich nehme nämlich die Breite und Höhe des Blattes in Pixeln und rechne dann mit der Höhe und Breite, welche meine Tabelle hat aus, wie ich sie platzieren muss und verschiebe dann meine Tabelle entsprechend. Doch wenn ich die Breite des Blattes minus die Breite meiner Tabelle rechne und wenn der Wert positiv ist, ihn durch 2 teile und dann meine Tabelle um diesen ausgerechneten Wert verschiebe, befindet sie sich nie und nimmer in der Mitte. Ich muss ca. 5/6 nehmen, also nicht durch zwei teilen, sondern durch 6 mal 5. Und auch das mit dem Verschieben gefällt mir nicht, ich würde lieber festsetzen können, ab wo man auf dem Blatt anfängt zu zeichnen. Doch ein SetDeviceCaps oder sowas in der Richtung habe ich bisher sowieso noch nirgends gefunden.

    Und was der Zoom betrifft, das begreif ich irgendwie sowieso gar nicht. Mein gezeichnetes bleibt einfach immer gleich gross und passt einfach nur bei 100% Zoom auf das Blatt (oder halt wenn die Rechnung falsch ist nicht) ^^ ...
    Dort vergiss ich irgendwas in die Rechnung mit einzubeziehen. Obwohl es mir ein wenig rätselhaft ist, wieso sowas nicht per MFC dann ausgeführt wird, schliesslich möchte ich eigentlich diesen Zoom gar nicht, mir wäre es lieber, wenn es immer 100% wäre. Aber diesen Zoom abstellen geht ja auch nicht ... *grml* ...

    Und dann noch zu dem das die Leute still bleiben. Was ist das denn dann bitte für ein Hilfeforum, wenn die Leute bei kleinsten Schwierigkeiten gleich alles einpacken und abhauen? ^^ ... Ja neee ... *g*

    Aber wie gesagt auf die Formel kann ich selber kommen. Solang ich weiss wo ich welche Information bzw. Angaben bekomme. Ich weiss es gibt die MSDN, aber sie ist ersten auf englisch (und die Übersetzung ist ja sehr sehr sehr schlechtes Deutsch und nicht vollständig) und zweitens ich bin mir irgendwie nie sicher was ich denn nun tatsächlich mit DeviceCaps holen kann. Vor allem, da ich manchmal Abweichungen habe, wo ich mich Frage woher die kommen, da sie anscheinend nicht von meinen Rechnungen sind ^^

    Grüssli



  • ich würde lieber festsetzen können, ab wo man auf dem Blatt anfängt zu zeichnen.

    Vielleicht das hier?
    CDC::SetWindowOrg
    Sorry, ich bin nicht gut beim Zeichnen, hab nur mal das Scribble Tutorial in der MSDN durchgearbeitet. Wobei... da könntest du auch mal gucken, ob das da drin steht. Ist aber auch wieder Englisch.


Anmelden zum Antworten