drucken - Schriftartwechsel unter WIN XP
-
Hallo,
ich hoffe es kannn mir jemand weiterhelfen. Ich habe schon diverse Foren durchsucht. Leider ohne Erfolg.
Folgendes Problem:
Ich möchte Text in verschieden Schriftarten bzw. Schriftgrößen formatiert zu Papier bringen. Unter WIN 98 SE ist das kein Problem. Hier kann ich die Schriftart wechseln und das Druckbild sieht entsprechend aus. Sobald ich den selben Text unter WIN XP drucke, druckt der Drucker immer die selbe Schriftart (welche?). Wo liegt hier das Problem?
Printer()->Orientation = poPortrait; Printer()->BeginDoc(); Printer()->Canvas->Font->Name = Ukn->Schriftname; Printer()->Canvas->Font->Size = Ukn->Schriftgroesse; Printer()->Canvas->TextOutA(iSpaltenPos,iZeilenHoehe/Drucker->fDruckFaktorY,"Urkunde"); Printer()->EndDoc();Die Variablen Ukn->Schriftname und Ukn->Schriftgröße lese ich aus einer *.ini
Ukn->Schriftname = ini->ReadString( "Ukn", "Fontname", "DortmundDB Italic"); Ukn->Schriftgroesse = ini->ReadInteger( "Ukn", "Fontsize", 24);Schriftname ist vom Typ AnsiString
Schriftgroesse ist vom Typ intVielen Dank für die Hilfe
MfG
Steffan
-
Steffan schrieb:
Wo liegt hier das Problem?
Die Schriftart ist unter XP nicht (korrekt) installiert!?
-
Nein. Die Schriften sind ordentlich installiert.
Baue ich den Text in einem Worddokument zusammen und formatiere in den mit den entsprechenden Schriftarten funktioniert das ja auch.
Ich denke der Hund liegt irgendwo in der Zuweisung der Schriftart begraben. Ich weiß nur nicht wo.

Steffan
-
Hallo
Eventuell liegts an nicht mehr passendem Charset? Meines Wissens muß nach einem Wechsels des Fontnamens auch das Charset passen. Sieh mal in die Hilfe zu TFont::Charset, da steht was dazu.
bis bald
akari
-
Leider ist das nicht die Lösung.
Ich habe jetzt direkt nach dem Schriftwechsel folgende Zeile eingebaut:
Printer()->Canvas->Font->Charset = 0;Charset 0 = ANSI-Zeichen
Trotzdem druckt Drucker wie er will und nicht wie ich es ihm sage.

Steffan
-
Habe eine mögliche Fehlerstelle entdeckt.
Ukn->fnFontStyle(Ukn->iFontstyle, Printer());Mit dieser Funktion möchte ich den Schriftstiel festlegen.
Ich übergebe Ihr einen Schlüssel (selbst erdacht) und den zur Zeit verwendeten Drucker.Die Funktion sieht wie folgt aus:
void __fastcall CUrkunde::fnFontStyle(int iStylecode, TPrinter *Drucker) { if (pFont) delete pFont; pFont = new TFont(); //--- FontStyle festlegen --- switch (iStylecode) { case 0: pFont->Style.Clear(); break; case 1: pFont->Style = TFontStyles() <<fsStrikeOut; break; case 2: pFont->Style = TFontStyles() <<fsUnderline; break; case 3: pFont->Style = TFontStyles() <<fsUnderline <<fsStrikeOut; break; case 4: pFont->Style = TFontStyles() <<fsItalic; break; case 5: pFont->Style = TFontStyles() <<fsItalic <<fsStrikeOut; break; case 6: pFont->Style = TFontStyles() <<fsItalic <<fsUnderline; break; case 7: pFont->Style = TFontStyles() <<fsItalic <<fsUnderline <<fsStrikeOut; break; case 8: pFont->Style = TFontStyles() <<fsBold; break; case 9: pFont->Style = TFontStyles() <<fsBold <<fsStrikeOut; break; case 10: pFont->Style = TFontStyles() <<fsBold <<fsUnderline; break; case 11: pFont->Style = TFontStyles() <<fsBold <<fsUnderline << fsStrikeOut; break; case 12: pFont->Style = TFontStyles() <<fsBold <<fsItalic; break; case 13: pFont->Style = TFontStyles() <<fsBold <<fsItalic <<fsStrikeOut; break; case 14: pFont->Style = TFontStyles() <<fsBold <<fsItalic <<fsUnderline; break; case 15: pFont->Style = TFontStyles() <<fsBold <<fsItalic <<fsUnderline <<fsStrikeOut; break; } Drucker->Canvas->Font = pFont; }Hier ist wahlscheinlich mein Fehler. Wenn ich diese Funktion nicht aufrufe, dann wird die Schriftart sauber umgestellt.
Warum funktioniert das aber unter WIN 98 SE?

Steffan
-
Genau in der Funktion lag der Fehler (genauer gesagt im Funktionsaufruf).
Habe es jetzt wie folgt gelöst:
void __fastcall CUrkunde::fnFontStyle(int iStylecode, TFont *Schriftstyle) { switch (iStylecode) { case 0: Schriftstyle->Style.Clear(); break; case 1: Schriftstyle->Style = TFontStyles() <<fsStrikeOut; break; usw. } }Der Aufruf der Funktion lautet dann:
Ukn->fnFontStyle(Ukn->iFontstyle, Printer()->Canvas->Font);Warum das aber unter WIN 98 SE funktioniert hatt kann ich mir leider nicht erklären. Jetzt druckt der Drucker jedenfalls was ICH will.

Vielen Dank für die Hilfe.
Steffan