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. |