Aktualisiert: 18.05.2007
Newest
  Tipps & Tricks
1.) Anpassung Controls an ein Formular (VB6)
2.) Kopier-Wiederaufnahme (VB6)
3.) Uhrzeit - alle Kürzel (VB6)
4.) Eigene IP-Addresse auslesen (VB6)
5.) Felder - Arrays (allgemeines, deklarieren) (VB.NET)
  Tutorials
1.) Prüfziffernverfahren österreichischer Sozialversic (VB6)
2.) Kommunikation zwischen Formularen bzw. Modulen (VB.NET)
3.) Musikdatein mittels API abspielen (VB6)
4.) Inputbox mit zusätzlichem Button (VB6)
5.) Access & MySQL | Teil 2/2 (VB6)
  Neueste Kommentare
  (letzten 50)
Thomas(21.02.2007 - 14:03)
Dag Johans..(16.11.2006 - 03:44)
Sebi2020(20.10.2006 - 21:43)
Suchen


 Sonstiges > Inputbox mit zusätzlichem Button     von VFensterB 
Seite: 1 von 4
  -    |  vor
Wie man einen Button auf einer Form erstellt, ist klar: Man wählt den Button in der Steuerelement-Liste aus und "zieht" ihn auf die Form. Wenn wir aber nun eine Inputbox mit zusätzlichem Button bestücken wollen, haben wir ein Problem: Wir haben einfache keine Form oder ähnliches, welche die Inputbox darstellt. Das ist auch klar: Die Inputbox wird direkt aus einer DLL erstellt. Das bedeutet, wir müssen mit anderen Mitteln unseren Button auf die Inputbox platzieren.
Dazu bedienen wir uns erst einmal des Subclassings: Windows besitzt ein internes "Post-System", mit dem Nachrichten an die verschiedenen Objekte geschickt werden. Unser Button erfährt so, ob der Mauscursor sich über ihm befindet, ob die Maustaste gedrückt ist oder losgelassen wird, damit er entsprechend reagieren kann, teilweise natürlich auch optisch.

Man kann sich das wie ein Röhrensystem vorstellen: An einer Seite wirft man die Nachricht hinein, über Weichen wird sie dann zu ihrem Bestimmungsort befördert.
Als VB-Programmier bekommt davon erst mal nichts mit. Deswegen muss man die Röhren zu sich "umleiten".
Das geschieht mit folgendem Grundgerüst:
Option Explicit


Private Declare Function SetWindowLong Lib "user32.dll" _
Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32.dll" _
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 As Long = -4

Dim lngWndProc As Long

Public Sub InitSC(lnghWnd As Long)
lngWndProc = SetWindowLong(lnghWnd, GWL_WNDPROC, AddressOf SubclassWndProc)

End Sub

Public Function SubclassWndProc(ByVal lnghWnd As Long, ByVal lngMsg As Long, _
ByVal lngWParam As Long, ByVal lngLParam As Long) As Long


SubclassWndProc = CallWindowProc(lngWndProc, lnghWnd, lngMsg, lngWParam, lngLParam)
End Function

Public Sub TerminateSC(lnghWnd As Long)
SetWindowLong lnghWnd, GWL_WNDPROC, lngWndProc

End Sub
Seite: 1 von 4     -    |  vor   dazugefügt am:28.02.2004 | bereits betrachtet:14919 mal
Empfehlen Sie diese Seite | zu Favoriten hinzufügen  Copyright 2004 by visualbasic.at