für Unix-Tom
-
Hallo Unix-Tom
leider kann man dir keine Mail schreiben daher hier
versuche ich das auf diesem Wegewie 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 istWarum 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.00000Kannst 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 dargestelltDanke 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 KinderspielDanke
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)