Dialogeinheiten


Die Größe und Positionierung von Dialogen und Dialogelementen (s. dazu auch Dialogeditor) wird nicht in Pixel, sondern in Dialogeinheiten (Dialogunits) angegeben. Dazu ist es erforderlich festzustellen, in wie viele Einheiten der aktuelle Bildschirm aufgeteilt ist. Meist - jedoch nicht in jedem Fall - gilt: Anzahl der Dialogeinheiten = Pixelanzahl / 2. Die genauen Werte können mit der Subroutine Get_Dialogunits ermittelt werden.
Dim g_XUnits,g_YUnits
 
Call Get_Dialogunits(g_XUnits,g_YUnits)
FF_MessageBox g_XUnits & "," & g_YUnits,0
 
Sub Get_Dialogunits(byRef p_XUnits,byRef p_YUnits)
     ' ermittelt die Dialogeinheiten des aktuellen Bildschirms
     ' übergibt in den Übergabeparametern die Werte für die Horizontale und Vertikale

     const SM_CXSCREEN=0
     const SM_CYSCREEN=1
 
     p_XUnits=FF_GetSystemMetrics(SM_CXSCREEN)*4\(CDbl(FF_GetDialogBaseUnits) Mod &h10000&)
     p_YUnits=FF_GetSystemMetrics(SM_CYSCREEN)*8\(CDbl(FF_GetDialogBaseUnits)  \  &h10000&)
End Sub

Als Bsp. wird ein Dialog erzeugt, der die Bildschirmfläche optimal ausnutzt und ein Bild anzeigt. Von den mit obiger Subroutine ermittelten Werten werden jeweils einige Einheiten abgezogen, um Platz für den von Windows erzeugten Rahmen um den Dialog und die Windows-Taskleiste zu schaffen.
'** Start Dialog Testdialog **
FF_AddDialog "Testdialog", g_XUnits-10, g_YUnits - 35
FF_AddControl "Testdialog","img1","IMAGE",0 ,0 ,g_XUnits-10, g_YUnits - 50
FF_AddControl "Testdialog","OK","BUTTON", g_XUnits-55, g_YUnits-48, 40, 11
'** End Dialog Testdialog **

FF_SetControl "Testdialog","img1", "c:\testbild.JPG"
FF_ShowDialog "Testdialog"

Soll ein Dialog oder Control pixelgenau dimensioniert werden (z.B. ein IMAGE-Control, um darin ein Bild seitenrichtig und mit 100%-Skalierung darzustellen), können Höhe und Breite des Controls wie folgt berechnet werden:
UnitX = Bild_X * g_XUnits / FF_GetSystemMetrics(0)
UnitY = Bild_Y * g_YUnits / FF_GetSystemMetrics(1)
Dabei werden g_XUnits und g_YUnits ermittelt wie oben beschrieben.
UnitX und UnitY sind dann die Werte für die Erstellung des Controls.