Wussten Sie...
...dass Sie Enumerationen nicht nur in Klassen oder anderen ActiveX-Modulen deklarieren können, sondern auch in normalen Standard-Modulen?
Genau so wie bei einer in einer Klasse deklarierten Enumeration können Sie diese zur Definition von Datentypen bei Variablen, Prozedur-Parametern, Rückgabewerten von Funktionen usw. einsetzen. Bei der Zuweisung an eine so deklarierten Variable oder beim Eintippen von Prozedurparametern kommen Sie so in den Genuss der IntelliSense-Funktion von Visual Basic - die Elemente der Enumeration werden Ihnen in den praktischen Listen zur Auswahl angeboten. Der einzige Unterschied ist, dass die Enumeration lediglich innerhalb des Projekts zur Verfügung stehen.
Auf diese Weise können Sie auch eine Konstantenliste für API-Funktionen in eine Enumeration umwandeln und den Datentyp eines Parameters in der Deklaration einer API-Funktion entsprechend festlegen. Solange der Parameter ursprünglich als Datentyp Long deklariert war, stört sich Windows gar nicht daran. So wird beispielsweise der Umgang mit der API-Funktion GetSystemMetrics erheblich komfortabler:
Public Enum SystemMetricConstants
SM_CXSCREEN = 0
SM_CYSCREEN = 1
SM_CXVSCROLL = 2
SM_CYHSCROLL = 3
' ... (vollständig im herunterladbaren Modul - siehe unten)
SM_DBCSENABLED = 42
SM_CMOUSEBUTTONS = 43
SM_CMETRICS = 44
SM_CXSIZEFRAME = SM_CXFRAME
SM_CYSIZEFRAME = SM_CYFRAME
SM_CXFIXEDFRAME = SM_CXDLGFRAME
SM_CYFIXEDFRAME = SM_CYDLGFRAME
End Enum
Declare Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As SystemMetricConstants) As Long
Selbst die recht häufig gebrauchte API-Funktion SendMessage ist dazu zu überreden, die Unzahl der Messages als Auswahlliste zur Verfügung zu stellen:
Public Enum WinMessages
WM_...
WM_...
End Enum
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As WinMessages, _
ByVal wParam As Long, lParam As Any) As Long
|