für Unix-Tom



  • Hallo Unix-Tom

    leider kann man dir keine Mail schreiben daher hier
    versuche ich das auf diesem Wege

    wie du mir mitgeteilt hast soll ich es mal mit

    dcPrint.GetDeviceCaps(HORZRES)

    versuchen. Das habe ich ja schon versucht aber ich bekomme die Auflösung
    vom Ausgewählten Drucker nicht zurück und somit kann ich auch keine Berechnung durchführen wobei das nicht das Problem ist

    Warum bekomme ich nichts zurück was mache ich falsch.

    Hier nochmal etwas Code

    void Druck_Auswertung::OnBUTTONDruck()
    {
    
    // Aufruf des Druckmenüs
    
     CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this);
    
    //wenn mit OK Bestätigt wird weiter somst Druckabbruch
    
    if (dlgPrint.DoModal()==IDOK)
    {
    CDC dcPrint;
    
    //hier sollen die Höhen und Seitenverhältnisse vom Drucker zurück
    //gegeben werden in der Regel von einer Din 4 Seite also mit wieviel Pixel 
    //er in Breite und Höhe auf der Seite druckt
    
    double Horizontal = dcPrint.GetDeviceCaps(HORZRES);
    double Verdikales = dcPrint.GetDeviceCaps(VERTRES);
    
    //erfolgt eine Testausgabe
    
    CString Ausg;
    Ausg.format("%f - %f",Horizontal,Verdikales);
    MessageBox(Ausg);
    ...
    ...
    ...
    

    mit diesen Werten könnte ich die Druckverhöltnisse und schriftgrößen
    anpassen aber leider belomme ich nichts zurück allerdings auch keinen Fehler
    Werte bleiben immer 0.00000

    Kannst du mir da einen Tip geben wie ich die Werte vom Frucker zur
    Bearbeitung bekomme.

    Die Daten die ich Drucke kommen aus einem Array und werden in keiner
    Sicht dargestellt

    Danke dir

    Vossy



  • Also, was Du hier machst, ist folgendes:

    CDC dcPrint;
    dcPrint.GetDeviceCaps( ...);
    

    das ist vergleichbar mit:

    int i;
    printf( i);  // in i steht nur Mist!
    

    dcPrint muss logischerweise der DruckerDC sein, den Du mit CPrintDialog::GetPrinterDC bekommst!



  • CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this);
    
     if (dlgPrint.DoModal()==IDOK)
     {
     // Den Drucker-DC vom Dialogfeld mit einem
     // CDC-Objekt verbinden
     CDC dcPrint;
     dcPrint.Attach(dlgPrint.GetPrinterDC());
    
    double Horizontal = dcPrint.GetDeviceCaps(HORZRES);
    double Verdikales = dcPrint.GetDeviceCaps(VERTRES);
    
     }
    

    Diese Funktionen gibt es aber auch
    http://www.mut.de/media/buecher/VCPLUS6/data/start.htm



  • Danke und es geht jetzt auch aber
    ich hatte nicht so recht verstanden was ihr meintet mit verbinden.

    Denn das hatte ich ja schon gemacht mit

    dcPrint.Attach(dlgPrint.GetPrinterDC());
    
            DOCINFO myPrintJob;
            myPrintJob.cbSize = sizeof(myPrintJob);
            myPrintJob.lpszDocName = "Rechenmeister";
            myPrintJob.lpszOutput = NULL;
            myPrintJob.lpszDatatype = NULL;
            myPrintJob.fwType = NULL;
    
            if (dcPrint.StartDoc(&myPrintJob)>=0)
    

    habe so wie ich mibekommen habe nur den Aufruf an den falschen platz
    gesetzt
    Die Blattberechnung ist nun ein Kinderspiel

    Danke
    Vossy



  • Könntest das ja dann mal zusammenschreiben und hier posten wen du fertig damit bist.
    Verschiebe ich dann in die FAQ.

    Hätte ich auch schon längst gemacht wenn ich Zeit hätte.
    Hab das ganze mal in QT unter Win ausprogrammiert.
    Gebe dir aber gleich einen Tip.
    Mach dir das ganze nicht nur für dein Programm sondern eine Klasse. Am besten mit einem File welches die Druckparameter definiert.
    Also Linie von cm bis cm. Statictext von dort bis dort. u.s.w.
    Wie gesagt. Habe das bereits unter QT mit einem INI-File gelöst. An dieses übergebe ich den Variableinhalt oder Tabelle und die Class druckt anhand der definierten Druckdatei.
    Soetwas gibt es bereits unter Windows mit MFC. (Codeguru)


Anmelden zum Antworten