Manchmal ist es notwendig oder erwünscht, daß zwar ein Fenster in der Größe vberändert werden darf, jedoch mit zwei Einschränkungen: Option Explicit Private WinOldProcMinMax Private Const GWL_WNDPROC = (-4) ' Die Nachricht WM_GETMINMAXINFO wird an ein Fenster ' geschickt, bevor es vergrößert bzw. verkleinert wird Private Const WM_GETMINMAXINFO = &H24 Private lX1 As Long Private lX2 As Long Private lY1 As Long Private lY2 As Long Private Type POINTAPI x As Long y As Long End Type Private Type MINMAXINFO ptReserved As POINTAPI ptMaxSize As POINTAPI ptMaxPosition As POINTAPI ptMinTrackSize As POINTAPI ' Minimale Größe ptMaxTrackSize As POINTAPI ' Maximale Größe End Type Private Declare Function DefWindowProc Lib "user32" _ Alias "DefWindowProcA" ( _ ByVal hWnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam 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 Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" ( _ ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" ( _ ByVal Destination As Any, _ ByVal Source As Any, _ ByVal Length As Long) Private Declare Sub CopyMemory1 Lib "kernel32" _ Alias "RtlMoveMemory" ( _ Destination As MINMAXINFO, _ ByVal Source As Long, _ ByVal Length As Long) Private Declare Sub CopyMemory2 Lib "kernel32" _ Alias "RtlMoveMemory" ( _ ByVal Destination As Long, _ Source As MINMAXINFO, _ ByVal Length As Long) Aktiviert wird das ganze mit dem AdressOf-Operator. ' AufrufProzedur ' Am besten im Form_Load-Ereignis aufrufen Public Sub SetMinMax(Form As Form, x1 As Long, _ y1 As Long, x2 As Long, y2 As Long) WinOldProcMinMax = SetWindowLong(Form.hWnd, _ GWL_WNDPROC, AddressOf WindowProcMinMax) lX1 = x1 lX2 = x2 lY1 = y1 lY2 = y2 End Sub ' Normalzustand wiederherstellen ' WICHTIG! Vor dem Beenden der Form aufrufen Public Sub UnloadMinMax(Form As Form) SetWindowLong Form.hWnd, GWL_WNDPROC, _ WinOldProcMinMax End Sub ' Hier kommen alle Nachrichten an, die an daß Fenster ' geschickt werden Private Function WindowProcMinMax(ByVal hWnd As Long, _ ByVal uMsg As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long Dim ret As Long Dim MM As MINMAXINFO If uMsg = WM_GETMINMAXINFO Then CopyMemory1 MM, lParam, Len(MM) With MM .ptMinTrackSize.x = lX1 .ptMinTrackSize.y = lY1 .ptMaxTrackSize.x = lX2 .ptMaxTrackSize.y = lY2 End With CopyMemory2 lParam, MM, Len(MM) ret = DefWindowProc(hWnd, uMsg, wParam, lParam) Else ' Wenn andere Nachricht, dann "durchlassen" ret = CallWindowProc(WinOldProcMinMax, hWnd, uMsg, _ wParam, lParam) End If WindowProcMinMax = ret End Function Ab hier braucht es nur noch den Aufruf aus (irgend-)einer Form, der am besten im Form_Load-Ereignis steht. Natürlich kann der Maximalwert auch weit über dem Windows-Standard liegen... ' Größeneinschränkung festlegen Private Sub Form_Load() SetMinMax Me, 200, 200, 500, 500 End Sub ' WICHTIG: Normalzustand wiederherstellen Private Sub Form_QueryUnload(Cancel As Integer, _ UnloadMode As Integer) UnloadMinMax Me End Sub So, das ist das Grundprinzip der Funktion. Dieser Tipp wurde bereits 23.796 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. |
sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. 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 Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |