|
| Autor |
Nachricht |
kokaiin_ Tutorial Leser

Anmeldedatum: 03.01.2008 Beiträge: 36
|
Rahmenlose Form verschieben
Verfasst am: 22.04.2008, 21:14 |
|
|
Wie ihr seht hat diese Form keinen Rahmen, ich möchte aber das wenn man in den Rot markierten Bereich klickt das Fenster verschieben kann.
Also wie bei einer ganz normalen Form mit Rahmen.
Würde das ganze über ne imagebox regeln, dazu fehlt mir aber leider der Befehl.
 |
|
| |
|
 |
Marduk_ « Moderator »

Anmeldedatum: 17.06.2007 Beiträge: 389
|
Verfasst am: 22.04.2008, 22:23 |
|
|
| Code: | Public difference As Drawing.Point
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
difference.Y = MousePosition.Y - Me.Location.Y
difference.X = MousePosition.X - Me.Location.X
'Differenz zum Formursprung wird berechnet(bleibt konstant)
'Timer wird gestartet
Time.Interval = 10
Time.Enabled = True
Time.Start()
End Sub
Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Time.Tick
Dim newpoint As Drawing.Point = Nothing
Dim mouse As Drawing.Point = MousePosition 'aktuelle Mausposition
'von der Mausposition wird mit der Differenz die neue Formlocation berechnet
newpoint.X = mouse.X - difference.X
newpoint.Y = mouse.Y - difference.Y
Me.Location = newpoint
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
Time.Stop()
Time.Enabled = False
End Sub |
Ist zwar .NET, aber das Prinzip ist das gleiche. Du brauchst dazu noch einen Timer auf der Form. |
|
| |
|
 |
exe-cute_ Poster


Anmeldedatum: 21.10.2007 Beiträge: 154
|
Verfasst am: 22.04.2008, 22:41 |
|
|
Hier eine einfachere lösung.
| Code: | Public Declare Function ReleaseCapture Lib "User32" () As Long
Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Public Sub MoveForm(ByVal lHandle As Long)
ReleaseCapture
Call SendMessage(lHandle, &HA1, 2, 0)
End Sub
|
Und so wendest du die Funktion an:
| Code: | Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
MoveForm Me.hwnd
End Sub |
|
|
| |
|
 |
kokaiin_ Tutorial Leser

Anmeldedatum: 03.01.2008 Beiträge: 36
|
Verfasst am: 22.04.2008, 22:44 |
|
|
Boahhh, vielen Dank für die Hilfe!
//edit:
Habs jetzt folgendermaßen gelöst:
Ich habe ein Modul erstellt und folgenden code für das Modul benutzt:
| Code: | Declare Function SendMessage Lib "User32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam _
As Long, lParam As Any) As Long
Declare Sub ReleaseCapture Lib "User32" ()
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2 |
In die Form habe ich dann folgendes geschrieben:
| Code: | Private Sub Image5_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
Dim ReturnValue As Long
If Button = 1 Then
Call ReleaseCapture
ReturnValue = SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub |
Image5 ist die Imagebox die jetzt auf dem rot markierten Bereich liegt (siehe 1. Post) !!!
Nochmal vielen Dank für die schnelle Hilfe! |
|
| |
|
 |
socx_ Newbie

Anmeldedatum: 19.09.2007 Beiträge: 4
|
Verfasst am: 23.04.2008, 11:01 |
|
|
Private Sub Image5_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
FormDrag Me
End Sub
ist auch ne möglichkeit  |
|
| |
|
 |
|
|