Tipp 0338 Drag & Drop verschiedener Steuerelemente
Autor/Einsender:
Datum:
  Detlev Schubert
07.06.2003
Entwicklungsumgebung:   VB 6
Seit der 32-bit-Version von VB verfügen fast alle Steuerelemente über eine Drag & Drop- ("Ziehen & Fallenlassen") Eigenschaft, die bei gleichen Steuerelementen, z.B. zum Verschieben von Text oder Bilder sogar fast ohne Code gelöst werden kann.
Aber wie sieht es bei einem Verschieben unterschiedlicher Steuerelemente aus? In unserem Beispiel wurde dies mit 2 Funktionen gelöst, die ein unbegrenztes und beliebiges Hin - und Herschieben ermöglichen.
Hinweis
Möchte man dem Anwender die Möglichkeit geben, dass er die Steuerelemente selbst individuell anordnen kann, eignen sich unsere Tipps  Programm-Einstellungen speichern (INI-Datei) oder Programm-Einstellungen speichern (SaveSetting) um die Positionen der einzelnen Steuerelemente zu speichern und beim nächsten Start wieder einzulesen.
 
Option Explicit

Private sngX As Single
Private sngY As Single

Private Sub Label1_MouseMove(Button As Integer, _
      Shift As Integer, X As Single, Y As Single)
  If Button Then Drag Label1, X, Y
End Sub

Private Sub Drag(Source As Control, X As Single, Y As Single)
  sngX = X
  sngY = Y
  Source.DragMode = 1
  Source.Drag vbBeginDrag
End Sub

Private Sub Frame1_DragDrop(Source As Control, _
      X As Single, Y As Single)
  Drop Frame1, Source, X, Y
End Sub

Private Sub Picture1_DragDrop(Source As Control, _
      X As Single, Y As Single)
  Drop Picture1, Source, X, Y
End Sub

Private Sub Drop(Target As Control, Source As Control, _
      X As Single, Y As Single)

  Set Source.Container = Target
  With Source
    .Drag vbEndDrag
    .DragMode = 0

    .Move X - sngX, Y - sngY

    If TypeOf Target Is PictureBox Then
        If .Left < 0 Then .Left = 0
        If .Top < 0 Then .Top = 0
        If .Left + .Width > Target.ScaleWidth Then
          .Left = Target.ScaleWidth - .Width
        End If
        If .Top + .Height > Target.ScaleHeight Then
          .Top = Target.ScaleHeight - .Height
        End If

    ElseIf TypeOf Target Is Frame Then
        If .Left < 0 Then .Left = 10
        If .Top < 30 Then .Top = 30
        If .Left + .Width > Target.Width Then
          .Left = (Target.Width - .Width) + 10
        End If
        If .Top + .Height > Target.Height Then
          .Top = Target.Height - .Height
        End If

    Else
        If .Left < 0 Then .Left = 0
        If .Top < 0 Then .Top = 0
        If .Left + .Width > Target.Width Then
          .Left = Target.Width - .Width
        End If
        If .Top + .Height > Target.Height Then
          .Top = Target.Height - .Height
        End If
    End If
  End With
End Sub
 

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (5,8 kB) Downloads bisher: [ 1839 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Freitag, 16. September 2011