HILFE Problem beim Drucken



  • vieleicht hat da ja jemand eine Lösung

    Ich drucke an einem TintenstrahlDrucker eine Tabelle aus
    Dort werden die Druckbreiten und Druckhöhen richtig genommen.
    Schriftgrößen sind alle o.k.

    Wenn ich jetzt das gleiche an einem Laderdrucker drucke stimmen die Werte
    nicht meht

    Hier mal etwas Code

    dcPrint.StartPage();
    
                dcPrint.TextOut(1800,80,"Erstellt am: "+ Datum);
    
                // Neue Schrift auswählen, originale speichern
                CFont* pOldFont = dcPrint.SelectObject(&fnBig);
    
                dcPrint.TextOut(700,150,"Rechenbericht für "+ Username);
    
                // Alte Schrift wiederherstellen
                dcPrint.SelectObject(pOldFont);
    
                DruckHoehe = 400;
    
                // Neue Schrift auswählen, originale speichern
                CFont* pOldFont3 = dcPrint.SelectObject(&fnBig1);
    
                dcPrint.TextOut(DruckBreite =+150,DruckHoehe,"gestellte Aufgabe");
                dcPrint.TextOut(DruckBreite =+650,DruckHoehe,"Lösungsvorschlag");
                dcPrint.TextOut(DruckBreite =+1150,DruckHoehe,"Lösung");
                dcPrint.TextOut(DruckBreite =+1650,DruckHoehe,"richtig gelöst");
                dcPrint.TextOut(DruckBreite =+2000,DruckHoehe,"Lösungszeit");
    
                // Alte Schrift wiederherstellen
                dcPrint.SelectObject(pOldFont3);
    
                DruckHoehe = DruckHoehe + 100;
    
                for (int a = 0;a < Datenanzahl;a++)
                {
    
                    dcPrint.TextOut(DruckBreite =+150,DruckHoehe,Druck[a][0]);
                    dcPrint.TextOut(DruckBreite =+650,DruckHoehe,Druck[a][1]);
                    dcPrint.TextOut(DruckBreite =+1150,DruckHoehe,Druck[a][2]);
    
                    if ( Text[a][6] == "nein")
                    {
    
                        dcPrint.SetTextColor(RGB(255,0,0));
    
                        dcPrint.TextOut(DruckBreite =+1650,DruckHoehe,Druck[a][3]);
    
                        dcPrint.SetTextColor(RGB(0,0,0));
                    }
                    else
                    {
                        dcPrint.TextOut(DruckBreite =+1650,DruckHoehe,Druck[a][3]);
                    }
    
                    dcPrint.TextOut(DruckBreite =+2000,DruckHoehe,Text[a][7]);
                    DruckHoehe = DruckHoehe + 60;
    
                    if (DruckHoehe > 3080 || DruckHoehe > 6160 )
                    {
                        dcPrint.EndPage();
                        dcPrint.StartPage();
                        DruckHoehe = 300;
    
                    }
    
                }
    
                DruckHoehe = DruckHoehe + 200;
    
                if (DruckHoehe > 2860 || DruckHoehe > 5720 )
                {
                    dcPrint.EndPage();
                    dcPrint.StartPage();
                    DruckHoehe = 300;
    
                }
    
                // Neue Schrift auswählen, originale speichern
                CFont* pOldFont1 = dcPrint.SelectObject(&fnBig1);
    
                dcPrint.TextOut(DruckBreite =+150,DruckHoehe,"Auswertung:");
                dcPrint.TextOut(DruckBreite =+1650,DruckHoehe,"Notenschlüssel:");
    
                // Alte Schrift wiederherstellen
                dcPrint.SelectObject(pOldFont1);
    

    wo ist der unterschied zum Beispiel

    dcPrint.TextOut(1800,80,"Erstellt am: "+ Datum);

    hier

    1800 und 80

    Wie nimmt es der Tintenstrahldrucker und wie der Laserdrucker

    Kennt da jemand eine Lösung

    Ist eine Dialogbasierende Anwendung welches keine
    Druckvorschau implementiert hat

    Danke
    Vossy



  • Du musst die Auflösung des Druckers berücksichtigen.
    Schau dir mal an wieviele Punkte ein Laserdrucker auf A4 Drucken kann und wieviel deiner. Dann merkst du den Unterschied.



  • Hallo unixtom@home

    Habe ich eine möglichkeit dises zu beeinflussen
    oder dem Drucker mitzuteilen welche Auflösung ich wünsche.

    Besser währe es natürlich wenn das programm ermitteln könnte
    welche Auflösung der Drucker hat.

    Gibt es da etwas da ich zu diesem Thema nichts finde

    Vossy

    Ein Beispiel wäre nett.



  • z.B.

    dcPrint.GetDeviceCaps(HORZRES)

    Die DPI holen
    Punkte pro Zoll und diese auf die Punkte Pro Millimeter umrechnen. Dann weisst du wie viele Punkte du bei einem Milimeter Zeichen musst.
    B.z.w. wieviele Punkte eine A4 Seite hat.

    Ich gebe dir vorerst kein Bsp. da es sich hier um Rechnungen handelt die man verstehen muß.
    Also setzte dich damit auseinander. Habe auch einige Zeit gebraucht um das System für verschiedene Drucker und Auflösungen zu verstehen.
    Wenn du es verstanden hast dann gibt es für dich auch keine Probleme mehr auf mit den GDI zu Zeichen.

    [ Dieser Beitrag wurde am 29.10.2002 um 13:44 Uhr von Unix-Tom editiert. ]



  • ich weiß was du mir sagen möchtest und die Berechnung
    ist sicherlich nicht das problem sondern

    CDC dcPrint;
    //      dcPrint.SetMapMode(MM_LOMETRIC);
    
    //      Höhen-/Seitenverhältnis des Geräts berechnen
    
            double Horizontes = dcPrint.GetDeviceCaps(HORZRES);
    
            //(double)dcPrint.GetDeviceCaps(VERTSIZE);
    
            CString Ausg;
            Ausg.Format("%f ",Horizontes);
            MessageBox(Ausg);
    

    ich bekomme zur Berechnung keinen Wert vom Contex zurück
    mit den ich Rechnen könnte. Das Versuche ich jetzt schon seit gestern aber
    ohne erfolg

    Mache ich da ein Fehler

    Vossy 😞


Anmelden zum Antworten