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 24.134 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 Dezemeber 2024 Roland Wutzke MultiSort im ListView-Control Dieses Beispiel zeigt, wie sich verschiedene Sortierfunktionen für ein ListView Control realisieren lassen. sevAniGif (VB/VBA) Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. |
||||||||||||||||
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. |