BooksXL - Ihr Online Buchshop

 

Home

Projekte

VB Tipps

über mich

vb tipps

 

 

AMAZON: Dan Appleman - Win32 Puzzle-Buch

home english version

Small Fonts, Pixel & Twips

Multimedia und Datenbank. Klar, wir setzen ein Autorensystem für die Bildchen (Vor- und Abspann) ein. Dieses ist pixelorientiert und sieht dann leider nicht mehr wie ein Windows Fenster aus. Aber man kann ja schließlich auch VB dazu bringen, auf Titel usw. zu verzichten, das Fenster passgenau über das andere legen und keiner hats gemerkt.

Ein kleines Problem blieb, als in einem dritten dritten Fenster auch noch passgenau Videos eingeblendet werden sollten. Man stelle sich also drei übereinander liegende Fenster vor, die alle mit optimierten Farbpaletten dargestellt werden mussten. Klar, daß Palettenshifts nicht zu verhindern waren. Deshalb haben wir dann die Funktion GetScreenColors eingeführt, um im Fall des Falles das mittlere Bild auszublenden, um ein Kippen der Farben von rot nach grün während des Videos zu verhindern.

Die Funktion TestForSmallFonts (MSDN sei Dank für GetDeviceCaps) war das Ergebnis einiger erfolgloser Versuche, einen Fehler in der Grafikkonfiguration eines der Tester zu finden. Viele Multimediaprogramme verweigern Ihren Dienst, wenn sie auf eine andere Einstellung als auf Small Fonts treffen. Der Grund ist ganz einfach - die meisten Multimedia Anwendungen werden mit pixelorientierte Werkzeugen erstellt. Positioniert man nun zusätzlich echte Windows Fenster, sind hierfür Twips, also letztlich die logische Länge auf einem Ausdruck das Maß der Dinge. Die Einstellung der Schriftarten für die Bildschirmdarstellung ändert nun aber genau diese logische Länge. Dies bedeutet, daß ein Element unter 640x480 Pixel + Small Fonts exakt so groß erscheint wie unter 800x600 + Large Fonts.

Nachdem ich CDs, die einen Neustart des Systems verlangen nicht für recht geglückt halte, gab es dann doch noch eine Lösung. Prinzipell liefern LPX und LPY TestForSmallFonts als Ergebnis einen Faktor, der für die Anpassung der Pixel- oder der Twipsobjekte verwendet verden kann.

' You may use it - no matter for what - af 1996
Declare Function GetDeviceCaps Lib "GDI" (ByVal hDC As Integer, _
ByVal nIndex As Integer) As Integer Declare Function CreateDC Lib "GDI" (ByVal lpDriverName As String, _
ByVal lpDeviceName As String, ByVal lpOutput As String, _
ByVal lpInitData As Any) As Integer Declare Function DeleteDC Lib "GDI" (ByVal hDC As Integer) As Integer Const BitsPixel = 12 Const Planes = 14 Public Const HORZRES = 8 ' Horizontal width in pixels Public Const VERTRES = 10 ' Vertical width in pixels Public Const VERTSIZE = 6 ' Vertical size in millimeters Public Const HORZSIZE = 4 ' Horizontal size in millimeters Public Const LOGPIXELSX = 88 ' Logical pixels/inch in X Public Const LOGPIXELSY = 90 ' Logical pixels/inch in Y
Public Function TestForSmallFonts() As Boolean
  Dim NumWidth As Integer
  Dim hDC As Integer
  Dim X As Integer
  Dim LPX, LPY As Integer
  hDC = CreateDC("DISPLAY", "", "", "")
  LPX = GetDeviceCaps(hDC, LOGPIXELSX)
  LPY = GetDeviceCaps(hDC, LOGPIXELSY)
  X = DeleteDC(hDC)
  If LPX = 96 And LPY = 96 Then
     TestForSmallFonts = True
  Else
     TestForSmallFonts = False
  End If
End Function
Public Function GetScreenColors() As Long
  Dim NumColors As Long
  Dim hDC As Integer
  Dim X As Integer
  Dim PL As Integer
  Dim BP As Integer
  hDC = CreateDC("DISPLAY", "", "","")
  PL = GetDeviceCaps(hDC, Planes)
  BP = GetDeviceCaps(hDC,BitsPixel)
  NumColors = CLng(PL * BP)
  X = DeleteDC(hDC)
  GetScreenColors = NumColors
End Function 

top