|
Small Fonts, Pixel & TwipsMultimedia 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, _ 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
|