VB-Homepage Tipp 040

Eine Form ohne Titelleiste verschieben

Mit unter ist es gewollt, eine Form zu definieren, die keine Titelleiste hat,
vorallen bei kleineren Programmen die wenig Platz in Anspruch nehmen sollen.
Das Problem besteht darin, daß die Form nicht mehr mit der Maus verschiebbar ist, wenn die Titelzeile fehlt.

Aber nun ist dies für Sie kein Problem mehr 
(es gibt sicher noch genügend andere)
Mit folgenden wenigen Anweisungen, können Sie die Form auch ohne Titelleiste verschieben.


######################################################
16Bit
General/Declarations
(Modul)
Type POINTAPI
   X As Integer
   Y As Integer
End Type

Type ConvertPOINTAPI
   XY As Long
End Type

General/Declarations (Form)
Declare Function SendMessage Lib "User" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Any) As Long
Declare Sub GetCursorPos Lib "User" (lpPoint As POINTAPI)

und diese drei Konstantendefinitionen
Const WM_LBUTTONUP = &H202
Const WM_SYSCOMMAND = &H112
Const MOUSE_MOVE = &HF012

Nun muß nur noch der Form ggf. auch enthaltenen Objekten in der Aktion "MouseDown" mitgeteilt werden, daß das Fenster verschoben werden soll.

Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim mpos As POINTAPI
Dim P As ConvertPOINTAPI
Dim Ret As Integer

Call GetCursorPos(mpos)
LSet P = mpos
Ret = SendMessage(Me.hWnd, WM_LBUTTONUP, 0, P.XY)
Ret = SendMessage(Me.hWnd, WM_SYSCOMMAND, MOUSE_MOVE, P.XY)

End Sub

######################################################
32Bit
Allgemein/Deklarationen
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2

Allgemein/SetObjectMoveReplace
Public Sub SetObjectMoveReplace(ObjHWND As Long)

If Not Form1.WindowState = 2 Then
   ReleaseCapture
   SendMessage ObjHWND, WM_NCLBUTTONDOWN, HTCAPTION, 0
End If

End Sub

Desweiteren müssen Sie jeweils im MouseDown und MouseUp Ereignis, des Objekts, das zum Verschieben der Form vorgesehen ist, noch den folgenden Aufruf einfügen.

SetObjectMoveReplace (Form1.hwnd)


Hinweis: Denken Sie an einen Button, über den Sie das Programm beenden können.


Tipp-Download

Quelle :

Zurück zur Übersichtsseite