Fontänderung in Edit-Control

langer1801

Erfahrenes Mitglied
Hallo, ich habe folgendes Problem:
Ich habe ein CEdit in meiner View-Klasse, mit dem ich Änderungen in einem Formular realisiere. Dazu erscheint das EDit-Control auf Mausklick genau in der Größe und an der Position, wo sich die Zelle befindet, deren Wert geändert werden soll. Das klappt auch super. Allerdings ist die Größe der Zellen und damit die Schriftgröße dirch das Formular vorgegeben. Nun habe ich ein Problem, mit dem Font des Edit-Control.
Wenn ich
Code:
CEdit myEdit;
CFont myFont.CreatePointFont(70,"arial")

myEdit.SetFont(&myFont);
passiert auch etwas. Denn der Cursor im Edit-Control wird in der eingestellten Fontgröße dargestellt. Wenn ich aber etwas eingebe, wird ein System-Font verwendet, d.h., in Abhängigkeit der von mir eingestellten Font-Größe wird mehr oder weniger die Schrift unten abgeschnitten, aber nicht kleiner dargestellt.
Weiß jemand, warum das so ist und wie ich das ändern kann. Im Moment mache ich das Edit-Controll größer als die Zelle. Ist nur ein Schönheitsfehler - aber genau dieser Schönheitsfehler stört mich.

Mfg

langer
 
Habe noch experimentiert und die wahrscheinliche Ursache. Ich erzeuge den Font in der Funktion, in der ich das Edit.Control platziere, dann gehe ich aus der Funktion raus - und damit ist dann auch der Font weg. Ich habe jetzt versucht, den Font global zu erzeugen, aber sowohl in der Dokumentenklasse (Initialisierung) als auch in der Ansichtsklasse in OnInitialUpdate gibts nach Zuweisung an das Edit-Controll Exceptions.
Nun habe ich versucht, in der Create-Methode des Edit den Font zu ändern. Da passiert auch was, die Schrift ist kleiner, aber komischerweise werden jetzt nur noch ganz wenige Tastatur-Eingaben verarbeitet - ein paar Kleinbuchstaben, Zahlen gar nicht usw. Woran könnte das liegen?

Mfg

langer
 
Vielleicht gibt es die anderen Zeichen in diesem Font nicht. Ist nur ne Vermutung. :)
Aber wäre es nicht einfacher, wenn Du selber eine Klasse vin CEdit ableitest, in der Du den Font festlegen kannst?
 
Da ich als Font Arial verwende, sollten wohl alle Zeichen da sein. Und meine Klasse ist schon von CEdit abgeleitet, da ich dort die Tastatur-Eingaben abfange, um das Betätigen der Enter-Taste festzustellen. Nach dem Abfangen wird aber die Funktion der Basisklasse aufgerufen, sodaß es da eigentlich kein Problem geben sollte. Und wenn ich den Font in der Create-Methode nicht ändere, werden auch alle Tastatur-Eingaben verarbeitet. Und die Create-Methode verwende ich, weil mein Edit-Control in der Ansichtsklasse als Child-Window erzeugt wird.

Mfg

langer
 
Den Font kannst du als Member in einer abgeleiteten CEdit-Klasse deklarieren und im Konstruktor erzeugen. Damit ist sichergestellt, dass das Font-Objekt zur Lebenszeit des Edit-Controls auch existiert.

Die Exceptions bekommst du, wenn das das Edit-Fenster noch nicht existiert (das war die Geschichte mit der IsWindow-Funktion).

Bei OnCreate sollte es eigentlich richtig funktionieren :confused:
Ansonsten deklariere den Font als public und weise ihn direkt nach myEdit.Create() zu.
 
Danke für die Antwort. Der Hinweis mit dem nicht existierenden Fenster hat den Groschen fallen lassen :) .
Das Fenster existiert zwar, aber hat die Größe 0. Ich habe den Font zugewiesen und danach das Fenster verschoben und die Größe eingestellt. Und da hat es gekracht. Jetzt mache ich das umgekehrt - und es funktioniert.
Warum es aber in OnCreate nicht funktioniert hat? Keine Ahnung.

Mfg

langer
 
Uups,
die Ursache für die Exceptions lag gar nicht daran, daß das Edit-Control die Größe 0 hatte, sondern ganz woanders. Ich hatte den Font in der Dokumentenklasse im Konstruktor erzeugt - und in OnNewDocument die Erzeugung nochmal reingeschrieben. Und da nach dem Laden der Datei OnNewDocument aufgerufen wird, der Font aber schon da war, hats gekracht. Ähnliches bei der Erzeugung in der View-Klasse in OnInitialUpdate. Auch diese Funktion wird mehrfach aufgerufen, mit obigem Ergebnis. Als ich den letzten Beitrag gepostet habe, hatte ich den Font probeweise global erzeugt - aber nur im Konstruktor der Dokumentenklasse. Als ich dann später in OnNewDocument wieder die Erzeugung reinschrieb, krachte es wieder. Also die Funktion da wieder raus - und es gibt keine Probleme mehr. Nur mal noch als Hinweis.

Mfg

langer
 
Zurück