VB-Homepage Tipp 122 |
MSGHOOK - Nicht verschiebbares Fenster trotz Titelleiste |
... und zum vierten, Ntzung der MSGHOOK.VBX ! In einem vorangegeangenen Tipp zur MSGHOOK.VBX ging es um das Unterbinden der Fenstervergrößerung durch den User, hier soll nun das Ganze erweitert werden, auf das Unterbinden des Verschiebens eines Fensters, trotz das das Fenster über eine normale Titelleiste verfügt. Und wieder ist es die MSGHOOK.VBX die für uns diesen Job übernimmt. festpos.mak FESTPOS.FRM FESTPOS.BAS MSGHOOK.VBX ProjWinSize=146,237,261,215 ProjWinShow=2 IconForm="Form1" Title="Feststehende Fensterposition" ExeName="FESTPOS.EXE" festpos.bas Option Explicit ' Windows declarations Declare Sub hmemcpy Lib "Kernel" (lpDest As Any, lpSource As Any, ByVal nCount As Long) ' Windows constants Global Const WM_WINDOWPOSCHANGING = &H46 Global Const SWP_NOSIZE = &H1 Global Const SWP_NOMOVE = &H2 ' Windows data types Type WINDOWPOS hWnd As Integer hwndInsertAfter As Integer x As Integer y As Integer cx As Integer cy As Integer flags As Integer End Type festpos.frm VERSION 2.00 Begin Form Form1 Caption = "Nichtverschiebbares / Nichtvergrößerbares Fenster" ClientHeight = 990 ClientLeft = 2220 ClientTop = 3765 ClientWidth = 5640 Height = 1395 Left = 2160 LinkTopic = "Form1" MinButton = 0 'False ScaleHeight = 990 ScaleWidth = 5640 Top = 3420 Width = 5760 Begin MsgHook MsgHook Left = 120 Top = 840 End Begin Label Label1 Alignment = 2 'Center Caption = "Na versuchs doch mal" FontBold = -1 'True FontItalic = 0 'False FontName = "Times New Roman" FontSize = 24 FontStrikethru = 0 'False FontUnderline = 0 'False Height = 615 Left = 120 TabIndex = 0 Top = 120 Width = 5415 End End Option Explicit Sub Form_Load () form1.Left = screen.Width / 2 - form1.Width / 2 form1.Top = screen.Height / 2 - form1.Height / 2 MsgHook.HwndHook = Me.hWnd MsgHook.Message(WM_WINDOWPOSCHANGING) = True End Sub Sub MsgHook_Message (msg As Integer, wParam As Integer, lParam As Long, result As Long) Dim WinPosition As WINDOWPOS If msg = WM_WINDOWPOSCHANGING Then ' Copy data to our local variable Call hmemcpy(WinPosition, ByVal lParam, Len(WinPosition)) ' Tell Windows to ignore new position WinPosition.flags = WinPosition.flags Or SWP_NOMOVE Or SWP_NOSIZE ' Copy data back to Windows Call hmemcpy(ByVal lParam, WinPosition, Len(WinPosition)) result = 0 End If End Sub Wenn Sie diesen Tipp nutzen möchten, erstellen Sie mit einem Editor Dateien die Sie wie angegeben benennen und fügen den Code ein. Desweiteren benötigen Sie die MSGHOOK.VBX, die Sie in Ihr Windows/System Verzeichnis kopieren. |
Tipp-Download |
Quelle : J.Wood & K.Peterson |