Ausgabe auf Drucker positionieren

d00p

Grünschnabel
Hallo zusammen,

ich entwickle derzeit ein Etiketten-Druckprogramm für meine Firma, doch leider
hänge ich an dieser Stelle fest.
Ich habe in jeder Zeile eines Etiketts bestimmte Eigenschaften für den Text (z.B. fett, rechtsbündig, unterstrichen,etc.)...Wenn ich nun mit
Code:
cPrinter.SelectObject( CreateFontIndirect( &Font[nZeile] ) );
Versuche dem Drucker die Font-Eigenschaften zuzuweisen funktioniert das leider nur halbwegs. Fett oder nicht fett geht, auch unterstrichenen Text gibt er aus, aber verschiedene Schriftgrößen und Rechtsbündig etc geht leider nicht.
Diese beiden Eigenschaften versuche ich mit folgenden Objekteigenschaften zuzuweisen
Code:
// Ausrichtung
Font[nLauf].lfOrientation
// Schriftgröße
Font[nLauf].lfWidth
Das Objekt Font ist ein LOGFONTObjekt. Der Drucker wird wie folgt aus einer ComboBox ausgewählt
Code:
HDC hdc = NULL;
CDC cPrinter;

int DrPos = m_comDrucker.GetCurSel();
m_comDrucker.GetLBText( DrPos, buffer );
hdc = CreateDC( NULL, buffer, NULL, NULL );
cPrinter.Attach( hdc );

Entwicklungsumgebung ist Visual C++ 6 auf WindowsXP.

Vielen Dank schonmal im Voraus,

d00p
 
Wie Du das implementiert hast, geht aus Deinem Code nicht hervor, aber Du mußt auf jeden Fall erst den Font konfigurieren und ihn danach mit CreateObject auswählen. Dann sollte das mit der Schriftgröße auch hinhauen.
Mit dem Links- oder rechtsbündig hast Du den falschen Weg gewählt lfOrientation gibt an, wie ein einzelner Buchstabe auf der Linie liegt. Wenn Du einen Text rechtsbündig machen willst, mußt Du mit der CDC-Memberfunktion SetTextAlign(UINT nFlags) mit dem Parameter TA_RIGHT den Text-Referenzpunkt auf rechts setzen. dann wird die bei TextOut angegebene x-Koordinate als rechter Rand des Textes interpretiert.
 
also die Eigenschafte der Schrift werden vor dem
Code:
cPrinter.SelectObject( CreateFontIndirect( &Font[nZeile] ) );
gesetzt...und das mit dem TextAlign muss ich noch anders lösen. Warum werden eigentlich spaces nicht mitgedruckt? Das wäre wichtig in meinem Fall
 
Ich habe gerade gesehen, daß Du in Deinem Code den Parameter lfWidth verwendest. Die Schriftgröße gibt man im Parameter lfHeight an. lfWidth kann dabei 0 sein.
Warum mußt Du das mit dem TextAlign anders lösen? Das ist doch recht bequem. Du kannst natürlich auch mit GetTextExtent(...) die Maße des Strings holen und Dir dann die Ausgabekoordinaten selber errechnen. Da mußt du dann aber auch noch selber auf das eingestellte Mapping achten. Aber wieso so kompliziert, wenn's mit SetTextAlign automatisch gemacht wird?
 
ist wie gesagt ein Adress-Etiketten Druckprogramm, d.h. Ausrichtung rechts wäre halt ganz recht und ich seh auch grad, dass ich das schon irgendwie garnichtmehr benutzte...im Grunde ist jetzt nur noch wichtig, dass er die Leerzeichen richtig mitdruckt, was er leider nicht macht...ich habe auch eine "Vorschau" der Adressaufkleber in einem RichEdit Control...da stimmt alles soweit und sieht gut aus...ist auch leider Alles etwas schwer zu erklären wenn man das nicht vor sich hat, nur zum pasten ist das zuviel
 
Tut mir leid, aber wenn ich nicht sehen kann, wie du den Text ausgibst, kann ich Dir leider nicht weiterhelfen. Normalerweise werden alle Leerzeichen mit ausgedruckt. Ich hatte damit noch keine Probleme.
Noch ein Tip: Du kannst den Drucker mit CPrinterDialog auswählen lassen, da bekommst du dann schon einen DC auf den ausgewählten Drucker (siehe MSDN).
 
ìch hab ja einen DC auf den gewählten drucker, das ist nicht das problem...(siehe erster post, unten)...ich weiss selber nicht woran das liegt, ich schau einfach nochmal aufmerksam durch den code, ich hab sicher was übersehen...danke trotzdem erstmal für die mühe mir zu helfen!
 
Zurück