vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Gibt es bei eigenen ActiveX-Elementen auch keine andere möglichkeit? Is dieses Subclassing wirklich zu schwierig? Irgendwie muss das doch gehen! 
Autor: unbekannt
Datum: 25.12.01 15:02

Hi Niko,

Subclassing ist nicht schwierig, nur muß man die Abläufe genau verstehen und sich mit dem Windows-Messagesystem etwas auseinandersetzen.

Füge in Dein Projekt ein Modul ein. Ärmel hochkrempeln, Stulle weglegen

Private Declare Function SetWindowLong Lib "user32" Alias _
      "SetWindowLongA"  _
     (ByVal hwnd As Long, _
      ByVal nIndex As Long, _
      ByVal dwNewLong As Long) As Long
 
Private 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 OldWndProg As Long
Private Const GWL_WNDPROC = (-4)
 
'Messages:
Private Const WM_MOUSEMOVE = &H200
 
'Diese Funktion "verbiegt - subclasst" Windows!
'Es wird dadurch möglich, dass statts der Standart Nachrichtenverarbeitung des
'Windows eine "eigene" Nachrichtenverarbeitung dazwischengehängt wird
 
Public Function ChangeWndProg(Byval hwnd As Long) As Long
       OldWndProg = SetWindowLong(hwnd,GWL_WNDPROC,AddressOf  WndProg)
End Function
 
Public Function ChangeOldWndProg(Byval hWnd As Long) As Long
      Dim RVal As Long
      RVal = SetWindowLong(hWnd, GWL_WNDPROC, OldWndProg)
End Function
 
 
'Das ist die "neue", unsere eigene Nachrichtenverarbeitung, die von Windows ab
'sofort aufgerufen wird. Es handelt sich um eine Windows-callback - Funktion
 
Public Function WndProg(Byval hwnd As Long, _
                                              Byval uMsg As Long, _
                                              Byval wParam As Long, _
                                              Byval lParam As Long) As Long
 
        'Bestimmte Nachrichten herauspicken, den Rest weiterleiten
        Select Case uMsg
                    Case WM_MOUSEMOVE
                            'hier z.B. wird die Mousbewegung eingefangen ...
                            Form1.Command1.Backcolor = vbred
        End Select
 
        WndProg = CallWindowProc(OldWndProg, hWnd, uMsg, wParam, Byval lParam)
End Function
Soweit zum Subclassing.

In der Form1 wird dieses Subclassing aktiviert UND DAS IST WICHTIG auch wieder rückgängig gemacht:

Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As _
  Single, Y As Single)
    Command1.BackColor = vbGreen
End Sub
 
Private Sub Form_Load()
   ChangeWndProg Me.hwnd
End Sub
 
Private Sub Form_Terminate()
   ChangeOldWndProg Me.hwnd
End Sub
cu
Lordchen
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Hooverbutton; Mousemove über die Form hinaus.124Niko00624.12.01 19:28
Re: Hooverbutton; Mousemove über die Form hinaus.293unbekannt24.12.01 21:08
Re: Hooverbutton; Mousemove über die Form hinaus.49Niko00624.12.01 22:06
Gibt es bei eigenen ActiveX-Elementen auch keine andere mögl...46Niko00625.12.01 14:12
Re: Gibt es bei eigenen ActiveX-Elementen auch keine andere ...345unbekannt25.12.01 15:02
Ich möchte mich wiedermal herzlig bedanken! 46Niko00625.12.01 15:09
Du hast recht, man muss die ganzen Nachrichten kennen! Wenn ...44Niko00625.12.01 15:22
Wie machst du denn das, bei deinen Programmen?114Niko00625.12.01 14:13

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel