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 13.796 mal aufgerufen.
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv (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. |
vb@rchiv CD Vol.6 ![]() Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats Dietrich Herrmann Einsatz einer DimmingForm Es wird eine Form vorgestellt, mit deren Hilfe man den gesamten Bildschirm auf verschiedene Arten mit transparenter Farbe überdecken und nur eine eigene Form im Vordergrund zeigen kann. sevMail für VB/VBA ![]() Mails abrufen und senden - ganz easy :-) Mailversand mit ZIP-Funktion, Unterstützung von SMTP-AUTH (authentifizierter Mailversand), Abholen von Mails mit Vorschau, Mail-Parser zum Decodieren aller MIME-Parts und Anlagen, RTF2HTML-Funktion u.v.m. |
||||||||||||||||
|
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. |
|||||||||||||||||



Fenstergröße einschränken
Das sieht jetzt alles sehr kryptisch aus, aber im Grunde ist es ganz einfach...ehrlich)


