Verschieben von Formen ohne Titelleiste

Wolfgang Kluge
wolfgang@vbwelt.de

Überall sieht man sie, und fast Überall sind sie auch gern gesehen.
Die Rede ist von Formen ohne Titelleiste. Diese sind weitaus besser zu Designen denn die Titelleiste mit Ihren frei konfigurierbaren Farben lässt da wirklich nicht viel zu

Also stellt man die Titelleiste ab (ich erklär hier mal nicht wie das geht...*gg*) und läßt seiner künstlerischen Ader freien lauf.

Doch wie läßt diese Form sich jetzt verschieben? Wo doch Windows so arg aufpasst, damit dieses nur mit derTitelleiste geht...

Die Antwort lautet (wie so oft) "SendMessage".

 Deklaration:
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
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Const HTCAPTION = 2
Private Const WM_NCLBUTTONDOWN = &HA1


Im Ereigniss Form_MouseDown sollte der Aufruf dann stehen.
Die Funktion ReleaseCapture benötigt man, um Windows die Kontrolle der Maus zu entziehen.
Danach wird MouseDown auf der Titelleiste simuliert und man kann loslegen.

' Verschieben von Formen ohne Titelleiste
ReleaseCapture
SendMessage Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&


Eine Besonderheit, die von Vor- und auch von Nachteil sein kann, ist allerdings zu beachten.
Form_MouseDown kommt auch nur auf der Form zum Einsatz, daß heißt, wenn ein Label-Steuerelement darüberliegt, muß in dessen MouseDown-Ereigniss der gleiche Code.
So kann man Natürlich auch Prima bestimmte Bereiche zum Verschieben der Form vorgeben.