Textbreite einer Textbox ermitteln

3. September 2007 15:00

Gibt es eine Möglichkeit die Textbreite eines Textes (in Pixeln) zu ermitteln?

Das Problem:

Unsere Anwender beschweren sich, dass in einigen Eingabefeldern (z.B. Name/Adresse) die maximale Anzahl der Zeichen erreicht ist, obwohl (scheinbar) noch Platz im Eingabefeld ist. Das ist natürlich durch die Proportionalschrift bedingt. Wenn im Feld 30 Zeichen vorgesehen sind und der Anwender gibt überwiegend Kleinbuchstaben ein, dann ist die Ausgabe relativ kurz, bei Großbuchstaben ist das genau umgekehrt.

Ich würde gerne nach der Eingabe (onValidate) prüfen, wie lang das Feld in Pixeln werden würde (unter Zugrundelegung eines bestimmten Fonts), um abzuprüfen ob es beim Druck noch passt, bzw. die Eingabe zurückweisen wenn die maximale Breite überschritten wird.

Wie also rechne ich aus, wie breit ein String beim Druck mit einem bestimmten Font werden wird?

Danke
Edgar

3. September 2007 15:11

In der Font-Datei sind Informationen, wie breit ein Zeichen ist, ich weiß jetzt aber nicht, ob das Relativ zur Höhe ist, oder ob die für jede definierte Pixelgröße absolut angegeben wird. An die Information musst du irgendwie herankommen, dann kannst du in Navision die gesamtbreite berechnen. In dem Zusammenhang sind auch Angaben über die Überlappung zu beachten, wenn vorhanden.

3. September 2007 15:21

danke für die Antwort, aber zur Struktur der Font-Dateien habe ich bisher nichts vernünftiges finden können, bzw. nichts damit anfangen können. Falls jemand mir das erklären könnte bzw. sagen kann, wo ich eine vernünfige Dokumentation finden kann wäre ich dankbar...

Edgar

30. November 2007 22:43

Hallo elf (?),

Du willst: 25stellige Eingabe in ein 30stelliges Feld ablehnen, wenn der Feldinhalt nicht ausgedruckt werden würde???

Du solltest: Das auszudruckende Feld im Report breit genug definieren!!!

PS: guter Test, ob alles paßt: betreffendes Feld nur mit W's füllen (nach meiner Erfahrung breitester Buchstabe) - drucken - zählen - alle W's gedruckt? = jetzt ist das Feld breit genug ;-)

Gruss
HerrSchmidt

3. Dezember 2007 07:25

Hallo Herr Schmidt,

das ist die übliche Vorgehensweise und so wird es auch normalerweise gemacht. Nun ist es aber so, dass meine Anwender es nicht verstehen können, wieso sie 30 große "W" nicht eingeben dürfen, obwohl das in die Eingabemaske passt. Wenn ich dann das Eingabefeld auf 25 Zeichen begrenze, dann fragen mich andere, warum sie nicht mehr als 25 kleine "i" eingeben dürfen, obwohl da ja im Ausdruck noch viel platz wäre. Beide haben recht. Es wäre also schön, die Prüfung der Eingabe in Abhängigkeit vom Inhalt (und nicht nur von der Anzahl) der eingegebenen Zeichen durchzuführen. Andere Sprachen verfügen über ein Property welches die Breite in Pixeln ausgibt (z.B. "Textbox.Preferredwidth" in .net). Diese Fuktion hätte ich gerne in Navi nachgebildet.

Gruß
Edgar

3. Dezember 2007 09:27

Nimm doch einfach eine nicht proportionale Schriftart wie Courier oder Lucida Console, dann passt immer die gleiche Menge an Buchstaben darein egal ob I oder W :mrgreen:

3. Dezember 2007 09:44

jo, das wärs!!!!!
Muss nur noch schnell meinen Lochkartenstanzer suchen, und dann geht's los.
:lol: