# Drag & Drop



## ShaggyWien (1. Dezember 2003)

Hallo Leute!

Schreibe gerade ein Programm und bräuchte da dringed Hilfe. Ich lese Buttons aus einer Mssql Datenbank aus und stelle sie grafisch am Bildschirm da.


Meine Fragen jetzt dazu:

1. Wie schaffe ich es jetzt per Drag and Drop die Buttons zu bewegen?
2. Wie kann ich am Screen einen Raster darstellen? Ich meine so einen wie im Entwurfsmodus...

Gibt es dazu irgendwo Tutorials? Habe schon in der Msdn und Sdk geblättert, aber die haben nicht so gute Beispiele.

Danke für eure Hilfe

Mfg
Shaggy


----------



## Retlaw (8. Dezember 2003)

Sieht noch etwas sehr komisch aus, aber ist vielleicht ein Ansatz   

```
Dim drag As Boolean
Dim A As Single
Dim B As Single

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    drag = True
End Sub

Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If drag = True Then
        Command1.Top = Y
        Command1.Left = X
    End If
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    drag = False
End Sub

Private Sub Form_Load()
    Command1.MousePointer = 15
End Sub
```


----------



## Retlaw (9. Dezember 2003)

Nachtrag:

Jetzt funktionierts, auch mit beliebiger Anzahl an Buttons.
Du braucht ein Steuerelementefeld, und folgenden Code, dann gehts von selbst wenn du neue Schaltflächen anlegst.

```
Option Explicit

Dim A As Single
Dim B As Single
Dim A1 As Single
Dim B1 As Single

Private Sub Command1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    Command1(Index).Tag = True
End Sub

Private Sub Command1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Command1(Index).Tag = False Then
        A1 = X
        B1 = Y
    End If
    A = A + X - A1
    B = B + Y - B1
    MoveButton (Index)
End Sub

Private Sub Command1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    Command1(Index).Tag = False
End Sub

Private Sub Form_Load()
    Command1(0).Tag = False
    Command1(0).MousePointer = 15
    Command1(1).Tag = False
    Command1(1).MousePointer = 15
    Command1(2).Tag = False
    Command1(2).MousePointer = 15
End Sub

Private Sub MoveButton(Index As Integer)
    If Command1(Index).Tag = True Then
        Command1(Index).Top = B
        Command1(Index).Left = A
    End If
End Sub
```

Ein Raster kannst du anzeigen indem du zwei Schleifen verschachtelst, für X und Y Koordinate und bei jedem Durchlauf den Zähler um die Rasterbreite erhöst.
Dann beim Inneren Durchlauf auf X/Y einen Punkt zeichnen.

Packen wir das Ganze in eine Sub mit dem Namen ZeichneRaster und dann kannst es aus dem Paint-Ereignis des Formulars mit

```
if bRasterEinAus=True then
    ZeichneRaster
end if
```
bRasterEinAus ist eine Variable vom Typ Boolean in der du festlegen kannst ob das Raster angezeigt wird oder nicht.


----------

