Haben auch Sie sich schon öfters gefragt, wie z.B. Microsoft Controls erstellt, die zur Entwurfszeit auf Clicks des Programmierers reagieren? Mit nachfolgendem Tipp möchten wir Ihnen zeigen, wie auch Sie selbst solche Steuerelemente erstellen können. Nur noch ein kleiner Hinweis: Erstellen eines einfachen Controls Erstellen Sie zuerst ein Standardprojekt mit dem Namen Fügen Sie nun den folgen Code zu Ihrem Control hinzu: Option Explicit Private Sub cmdButtonA_Click() fktA End Sub Private Sub cmdButtonB_Click() fktB End Sub Das Control benötigt aber noch ein Modul namens modFunctions, in welchem wir die Funktionen fktA, fktB und evt. weitere deklarieren. Option Explicit Public Function fktA() MsgBox "Sie haben auf den Button 'Button A' geklickt!", _ vbInformation End Function Public Function fktB() MsgBox "Sie haben auf den Button 'Button B' geklickt!", _ vbInformation End Function Wieso wir das jetzt etwas umständlich machen, werde ich Ihnen später noch genauer erklären. Wenn Sie jetzt das Control testen, werden Sie feststellen, dass zwar zur Laufzeit die Messageboxen angezeigt werden, jedoch nicht zur Entwurfszeit. Da wir aber genau dies erreichen wollen, machen wir uns jetzt ans Subclassing. Subclassing Option Explicit Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Declare Function CallWindowProc Lib "user32" _ Alias "CallWindowProcA" ( _ ByVal lpPrevWndFunc As Long, _ ByVal hwnd As Long, _ ByVal Msg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Private Const GWL_WNDPROC = (-4) Private Const WM_MOUSEACTIVATE = &H21 Dim PrevProc(10) As Long, PrevhWnd(10) As Long Public Sub HookControl(nHwnd As Long, nTmpIndex As Long) PrevProc(nTmpIndex) = SetWindowLong(nHwnd, GWL_WNDPROC, _ AddressOf WindowProc) PrevhWnd(nTmpIndex) = nHwnd End Sub Public Sub UnHookControl(nHwnd As Long, nTmpIndex As Long) SetWindowLong nHwnd, GWL_WNDPROC, PrevProc(nTmpIndex) End Sub Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long On Error Resume Next Dim i As Long For i = 0 To 10 If hwnd = PrevhWnd(i) Then Exit For Next i WindowProc = CallWindowProc(PrevProc(i), hwnd, uMsg, wParam, lParam) If uMsg = WM_MOUSEACTIVATE Then ' Ereignise simulieren Select Case i Case 0 fktA Case 1 fktB End Select End If End Function Wie Sie sehen rufen wir hier im Bereich ' Ereignise simulieren noch mals die Funktionen fktA und fktB auf. Würden wir hier direkt auf z.B. cmdButtonA_Click() zugreifen, würde es zu einem Crash kommen. Deshalb umgehen wird das Problem mit dem Modul modFunctions. Fertigstellen des Controls Fügen Sie einfach noch folgenden Code an Ihr Control an: Private Sub UserControl_Initialize() HookControl cmdButtonA.hwnd, 0 HookControl cmdButtonB.hwnd, 1 End Sub Private Sub UserControl_Terminate() UnHookControl cmdButtonA.hwnd, 0 UnHookControl cmdButtonB.hwnd, 1 End Sub So das sollte es gewesen sein. Ich hoffe, dass ich Ihnen den Aufbau von Usercontrols, welche bereits zur Entwurfszeit auf Clicks reagieren, etwas näher bringen konnte. Dieser Tipp wurde bereits 17.503 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 sevWizard für VB5/6 Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |