HFONT wir erst nach dreimaligen Ausführen richtig dargestellt!?!
-
Ich erstelle mir mit der untenstehenden Code einen Font der auf einem Image dargestellt wird. Mein Problem ist, dass der Text immer erst nach dreimaligen Ausführen der Fkt. richtig dargesellt wird.
Ergebnisse bei den drei Ausführungen:
1. Es wird auf eine Std. Schrift zurück gegriffen(vielleicht MS Sans Serif,12pt), die Höhe des Images zu dieser Schrift gesetzt und die Breite des Images zum hFont gesetzt.
2. Die Höhe des Images zum hFont wird gesetzt
3. Der Text wird mit dem erstellen hFont sauber dargestellt.Woran kann das liegen, bzw. wie kann ich das gewünschte Ergebnis schon beim 1. Ausführen der Fkt. erhalten? ... außer mit einer Schleife!
(Ich benutze den BCB6)// Beispielcode zu meinem Button-Event int fontGroesse = StrToInt(EditGroesse->Text); AnsiString font = Cmb_Font->Items->Strings[Cmb_Font->ItemIndex]; AnsiString text = Edit1->Text; HFONT hFont = CreateFont( fontGroesse , 0 , 0 , 0 , 400 , false , false , false , DEFAULT_CHARSET , OUT_DEFAULT_PRECIS , CLIP_DEFAULT_PRECIS , DEFAULT_QUALITY , DEFAULT_PITCH | FF_DONTCARE , font.c_str() ); SelectObject(Image1->Canvas->Handle, hFont); Image1->Width = Image1->Canvas->TextWidth(text); Image1->Height = Image1->Canvas->TextHeight("Wg"); Image1->Canvas->TextOut(0,0,text); //DeleteObject(hFont);
-
Hallo
Gibt es einen bestimmten Grund warum du CreateFont benutzt? TCanvas hat ja selber auch eine Font-Eigentschaft, wo du den Font über VCL-Möglichkeiten manipulieren kannst.
bis bald
akari
-
Ich muß auf dem Bildschirm ein Etikett erstellen und das ausdrucken.
Dabei wird die Größe des Fonts in Millimeter eingegeben und muß auf dem Bidlschirm genauso Groß sein wie auf dem Drucker. Wenn ich über die Font-Eigenschaften gehe und Punkt angebe wird der Font auf dem Drucker leicht größer und verdeckt mir andere Elemente. (z.B. Linien)Eigentlich funktioniert das ganz gut, wenn ich direkt auf ein Panel einen Text mit HFONT schreibe, nur wenn ich auf ein Image schreibe treten die oben genannten Ereignisse auf. Ich muß auf einem Image zeichen, damit dich den Text mit der Maus verschieben kann ... zu mindest habe ich es so implementiert
Edit:
Ein Wunder! Ohne ersichtliche Änderungen wird der jetzt Font beim ersten mal richtig dargestellt, dafür wird jetzt die Textlänge nicht mehr richtig berechnet.Ok, der Fehler liegt wohl irgendwo anders, trotzdem Danke!
-
Ich hab den oben stehenden Code wie folgt geändert.
//SelectObject(Image1->Canvas->Handle, hFont); Image1->Canvas->Font->Handle = hFont;
Da gibt es jetzt noch ein weiteres Problem das auch schon vorher aufgetreten ist.
Wenn ich die "Textbreite" haben will, egal ob mit TextWidth oder TextExtent nimmt diese ab 33 Pixel (fontGroesse) nicht ausreichend zu! D.h. Das mein Image zu klein ist und der Text nicht mehr ganz angezeigt wird.Weiss jemand wo der Fehler ist bzw. wie ich auch bei einer größeren Schrifthöhe die Textbreite richtig bekommen kann?