[vb6]Form nur innerhalb eines Fensters verschieben

Hi

Ich suche nach einer Möglichkeit eine Form nur innerhalb einer anderen Form zu verschieben.

Man soll das Fenster also nur innerhalb vorgegebener Grenzen bewegen können.

Bin dankbar für jede Hilfe!

Form nur innerhalb einer anderen Form verschieben

Ich suche nach einer Möglichkeit eine Form nur innerhalb einer
anderen Form zu verschieben.

Man soll das Fenster also nur innerhalb vorgegebener Grenzen
bewegen können.

Hallo Vino,

wahrscheinlich geht Ganze das nur mit APIs.

Als Notbehelf.
Form2 ist kleiner als Form1. Immer wenn du mit der Maus über die Form2-Fläche fährst (Titelzeile zählt nicht zur Form2-Fläche) wird die Fensterposition von Form2 überprüft, ggfs. dann Form2 wieder zurechtgerückt.

in Form1:

Option Explicit
'
Private Sub Form\_Initialize()
Form2.Show 0
End Sub

in Form2:

Option Explicit
'
Private Sub Form\_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Form2.Top Form1.Top + Form1.Height Or \_
 Form2.Left Form1.Left + Form1.Width Then
 Form2.Top = Form1.Top
 Form2.Left = Form1.Left
End If
End Sub

Gruß
Reinhard

Hallo VinoCarlo.

Verwende doch ein MDI-Formular.

VG
Carsten

Habe ich mir auch schon gedacht, aber da kann ich in den inneren Fenstern keine eigene Menüleiste erstellen.

Jedes mal rutscht die Menüleiste vom Child in die Menüleiste vom Parent MDI.

Form nur innerhalb anderer Form bewegen

Ich suche nach einer Möglichkeit eine Form nur innerhalb einer
anderen Form zu verschieben.

Man soll das Fenster also nur innerhalb vorgegebener Grenzen
bewegen können.

Hallo Carlo,

Form1 hat einen Timer, Form2 muß kleiner sein als Form1.
Code von Form1:

Option Explicit
'
' Steuerelement: Timer-Steuerelement "Timer1"
'
Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
'
Private Declare Function SetWindowPos Lib "user32" (ByVal \_
 hwnd As Long, ByVal hWndInsertAfter As Long, \_
 ByVal x As Long, ByVal y As Long, ByVal cx As Long, \_
 ByVal cy As Long, ByVal wFlags As Long) As Long
'
Private Declare Function ShowWindow Lib "user32" (ByVal \_
 hwnd As Long, ByVal nCmdShow As Long) As Long
'
Private Declare Function GetWindowRect Lib "user32" (ByVal \_
 hwnd As Long, lpRect As RECT) As Long
'
Private Declare Function FindWindow Lib "user32" Alias \_
 "FindWindowA" (ByVal lpClassName As String, ByVal \_
 lpWindowName As String) As Long
'
Const SWP\_NOMOVE = &H2
Const SWP\_NOSIZE = &H1
Const HWND\_TOPMOST = -1
Const SW\_MAXIMIZE = 3
Const SW\_MINIMIZE = 6
Const SW\_RESTORE = 9
'
Private Type RECT
 Left As Long
 Top As Long
 Right As Long
 Bottom As Long
End Type
'
Dim XhWnd&, L, T, B, R, A As RECT
'
Private Sub Form\_Load()
Form2.Show 0
XhWnd = FindWindow(vbNullString, "Form2")
Form2.Top = Me.Top + 1000
Form2.Left = Me.Left
SetForegroundWindow XhWnd
Timer1.Enabled = True
Timer1.Interval = 500 'Angabe in Millisekunden
End Sub
'
Private Sub Timer1\_Timer()
Call GetWindowRect(Me.hwnd, A)
L = A.Left
T = A.Top
B = A.Bottom
R = A.Right
Call GetWindowRect(XhWnd, A)
If A.Left B Or A.Right \> R Then
 Form2.Top = Me.Top + 1000
 Form2.Left = Me.Left
End If
SetForegroundWindow XhWnd
End Sub
'
Private Sub Form\_Terminate()
Timer1.Enabled = False
End Sub
'
Private Sub Form\_Unload(Cancel As Integer)
Timer1.Enabled = False
End Sub

Gruß
Reinhard