Fontgroesse in Picturebox (verschiedene Monitor-/Rechnerkonfigurationen)

26/04/2008 - 15:26 von Wolfgang Bußmann | Report spam
Hallo an "alle" Graphikspezialisten!

ich möchte gerne in einer Picturebox einen Text ausgeben. Dieses ist an
sich kein grosses Problem.

Leider musste ich hierbei jedoch feststellen, dass bei der Textausgabe
diese auf unterschiedlichen Rechner-/Bildschirmkonfigurationen nicht
immer die gleiche Pixelgroesse ergibt. Dieses benoetige ich jedoch
unbedingt. Siehe hierzu auch nachfolgendes kleines "Testprogramm".

Ich vermute, dass dieses irgend etwas mit Twips, Himetric,
screen.twipsperpixelx oder àhnlichem zu tun hat. Leider bin ich trotz
einiger Recherchen noch nicht auf einen entsprechenden Lösungsansatz
gekommen.

Ich würde so etwas benötigen, wie die direkte Umrechnung von einer
Pixelangabe in der Picturebox, in die entsprechende Fontgroesse. Also 12
Pixel in der Picturebox ergeben xx als Fontgröße. Kann mir jemand
hierfür vielleicht einen Lösungsansatz bieten oder angeben womit dieses
evtl. zusammenhàngt.

Viele Grüße Wolfgang


'***** Testprogramm

Option Explicit

Private Sub cmdCommand1_Click()
Dim AusgabeText As String
Dim I As Long

Endpicture.AutoRedraw = True
Endpicture.AutoSize = False
Endpicture.BorderStyle = 0
Endpicture.Width = 240 * Screen.TwipsPerPixelX
Endpicture.Height = 180 * Screen.TwipsPerPixelY
Endpicture.ScaleWidth = 240
Endpicture.ScaleHeight = 180
Endpicture.ScaleMode = 3 'auf Bildschirmpixel setzen

Endpicture.Line (0, 0)-(239, 179), vbBlack, B 'Rahmen zeichnen (nur
zum Test)

Endpicture.CurrentX = 1
Endpicture.CurrentY = 1

For I = 1 To 10
AusgabeText = "Test"
Endpicture.Font = "Arial"
Endpicture.Fontsize = I
Endpicture.Print AusgabeText
Debug.Print "Fontsize:" & Endpicture.Fontsize & vbTab &
"Pixelgroesse:" & Endpicture.TextHeight(AusgabeText)
Next I

'z. B.
'Ausgabe auf einem Monitor bzw. Rechner
'Fontsize:1,5 Pixelgroesse:2
'Fontsize:2,25 Pixelgroesse:4
'Fontsize:3 Pixelgroesse:5
'Fontsize:3,75 Pixelgroesse:6
'Fontsize:5,25 Pixelgroesse:7
'Fontsize:6 Pixelgroesse:10
'Fontsize:6,75 Pixelgroesse:12
'Fontsize:8,25 Pixelgroesse:14
'Fontsize:9 Pixelgroesse:15
'Fontsize:9,75 Pixelgroesse:16

'auf einem anderen Monitor bzw. Rechner
'Fontsize:1,2 Pixelgroesse:2
'Fontsize:1,8 Pixelgroesse:4
'Fontsize:3 Pixelgroesse:6
'Fontsize:4,2 Pixelgroesse:7
'Fontsize:4,8 Pixelgroesse:10
'Fontsize:6 Pixelgroesse:13
'Fontsize:7,2 Pixelgroesse:15
'Fontsize:7,8 Pixelgroesse:16
'

End Sub
 

Lesen sie die antworten

#1 Wolfgang Bußmann
28/04/2008 - 17:49 | Warnen spam
Hallo an "Alle" die noch mitlesen!

Ich habe den "Fehler" bzw. die Ursache für die unterschiedlichen
Fonthöhen zwischenzeitlich sehr wahrscheinlich gefunden.

Es liegt an den eingestellten Schriftgrößen, versteckt in den
erweiterten Monitoreigenschaften.

Hier kann man folgende Werte einstellen: 72, 96, 120 DPI und
Benutzerdefiniert.

Hieraus ergeben sich die unterschiedlichen TwipsPerPixel-Werte 12, 15
und 20. Ändere ich bei den Eigenschaften auf beiden Rechnern beide Werte
auf z.B. 96 DPI habe ich auf beiden Anzeigen, auf den ersten Eindruck
hin, gleiche Anzeigegrößen.

Weiterhin ist definiert:
Die Fontgröße wird in "Punkt" angegeben. 1 Punkt ist wieder 1/72 Zoll.

Ein Zoll (25,4 cm) hat 1440 Twips - somit entspricht 1 Punkt 20 Twips.
(1440 / 72 = 20).

Wenn ich jetzt eine Fontgröße von 15 Punkt angebe, brauche ich hierfür
15 * 20 Twips = 300 Twips.

Bei einer Anzeige von 240 x 180 Pixeln ist folgende Height-Angabe
erforderlich:
12 DPI(TwipsperPixelY) * 180 = 2160 Twips
15 DPI(TwipsperPixelY) * 180 = 2700 Twips
20 DPI(TwipsperPixelY) * 180 = 3600 Twips

Schreibe ich jetzt mehrere Texte untereinander, bekomme ich bei 12 DPI
7,2 Zeilen (2160/300), bei 15 DPI 9 Zeilen (2700/300) und bei 20 DPI 12
Zeilen (3600/300) untereinander.

Definiere ich jetzt 4 Ausgaben untereinander mit 15 DPI sehe es so aus:
.currenty = 0 * 15 = 0
.currenty = (20 * 15)-1 = 299
.currenty = (40 * 15)-1 = 599
.currenty = (60 * 15)-1 = 899
.
Daraus folgt, dass alle 300 Twips eine neue Zeile anfàngt, die auch die
komplette Fonthöhe aufnehmen kann.

Falls jetzt ein anderer Monitor einen Wert von 12 DIP hat, sieht die
Berechnung schon anders aus:
.currenty = 0 * 12 = 0
.currenty = (20 * 12)-1 = 239
.currenty = (40 * 12)-1 = 479
.currenty = (60 * 12)-1 = 719
.currenty = (80 * 12)-1 = 959

Da die Y-Startwerte gleich bleiben müssen und die Fonthoehe auch fest
vorgegeben ist, überschreiben sich in der zweiten Zeile bereits die
Ausgabetexte um 60 Twips.

Da jedoch die Y-Startwerte immer gleich bleiben müssen, muß ich zur
kompletten Anzeige die Fonthoehe so anpassen, dass sie hier im Beispiel
nur 240 Twips betràgt. Hierfür muss ich jetzt noch eine Berechnung
entwickeln. Eine Hilfe hierzu wàre schon mal, wie ich die
DPI-Einstellung ermitteln kann?

Ein weiteres Problem scheint noch zu sein, dass bei der Ausgabe die
Schrifthoehe von Windows selbst noch nach oben, oder nach unten
korrigiert wird. Dieses erfolgt wahrscheinlich um immer "ganze" Pixel
anzeigen zu können.

Ich hoffe, dass ich mit meinen Überlegungen keinem "Denkfehler"
aufgesessen bin. Für Korrekturen wàre ich daher dankbar.


Gruß

Wolfgang Bußmann


Ähnliche fragen