Sind Sie genauso bequemlich wie ich? Dann freuen Sie sich
wahrscheinlich ebenso wie ich über jeden Tipp, der Ihnen Tipparbeit
beim Programmieren erspart. Die benutzerdefinierte Variable RECT
kennen Sie sicher, wenn Sie häufiger API-Funktionen einsetzen:
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Die Tipparbeit besteht hierbei sehr oft darin, allen vier
Elementen Werte zuzuweisen.
Dim nRect As RECT
nRect.Left = WertLeft
nRect.Top = WertTop
nRect.Right = WertRight
nRect.Bottom = WertBottom
Die erste Vereinfachung besteht darin, das With...End With-Konstrukt
zu verwenden:
Dim nRect As RECT
With nRect
.Left = WertLeft
.Top = WertTop
.Right = WertRight
.Bottom = WertBottom
End With
Aber so richtig flott geht das doch immer noch nicht von der
Hand, oder? Außerdem kann ja schon eine andere Variable (auch eine
so eine benutzerdefinierte Variable oder eine Objekt-Variable) mit With...End
With in Gebrauch sein. Greifen wir nun wieder in die API-Kiste und
fördern daraus die Funktion SetRect
zu Tage.
Private Declare Sub SetRect Lib "user32" (Rect As RECT, _
ByVal Left As Long, ByVal Top As Long, ByVal Right As Long, _
ByVal Bottom As Long)
Der Aufruf zur Werteübergabe wird nun noch einfacher:
Dim nRect As RECT
SetRect nRect, WertLeft, WertTop, WertBottom, WertRight
Wenn nicht alle Elemente zu setzen sind, übergeben Sie einfach
0 - zum Beispiel:
Dim nRect As RECT
SetRect nRect, WertLeft, 0, WertBottom, WertRight
Leider kennt das API keine optionalen Parameter - aber Visual
Basic kennt sie und liefert automatisch den Wert 0, wenn ein
optionaler Parameter weggelassen worden ist. Verstecken wir also den
API-Aufruf hinter einer VB-Prozedur gleichen Namens. Damit es keinen
Namenskonflikt gibt, müssen wir die API-Funktion in ihrer
Deklaration umtaufen, etwa in SetRectAPI, und den Original-Namen als
Alias angeben:
Private Declare Sub SetRectAPI Lib "user32" Alias "SetRect" _
(lpRect As Rect, ByVal Left As Long, ByVal Top As Long, _
ByVal Right As Long, ByVal Bottom As Long)
Public Sub SetRect(Rect As Rect, Optional ByVal Left As Long, _
Optional ByVal Top As Long, Optional ByVal Right As Long, _
Optional ByVal Bottom As Long)
SetRectAPI Rect, Left, Top, Right, Bottom
End Sub
Abgesehen davon, dass Sie noch den Namen der Prozedur und der
Variablen für die Werte bis zur einbuchstabigen Unlesbarkeit
verkürzen könnten, geht es wohl nicht mehr kürzer:
Dim nRect As RECT
SetRect Rect, , WertTop, , WertBottom
Ach, was wäre das Programmiererleben doch arg eintönig, wenn
Sie und ich uns nicht tagtäglich solche schönen
Arbeitserleichterungen einfallen lassen könnten, nicht wahr?
|