Dialoge mit Drag n´ Drop ?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

schosch
*
Beiträge: 12
Registriert: Sa, 21.08.2004 20:22

Dialoge mit Drag n´ Drop ?

Beitrag von schosch »

Hallo,
ist es möglich die Elemente (Buttons oder Grafische Kontrollfelder) in einem Dialog bei der Benutzung zu verschieben? i.e. mit DragAndDrop.
Und damit nicht genug: ist es möglich das Zielfeld "magnetisch" zu machen? So wie bei Solitär: wenn die Karte in die Nähe des gewünschten Feldes kommt wird sie angezogen?

Höchst gespannt auf Hinweise und schönen Gruß,
Georg
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Im Prinzip ist das relativ einfach:
Du brauchst ein Ereignis "Maustaste gedrückt" und mußt damit die x und y Koordinate der Schaltfläche in eine Variable schreiben. Außerdem die aktuelle Koordinate des Mauszeigers in eine Variable speichern. Ich nenne die jetzt mal so:
x_1 = x-Koordinate der Schaltfläche
y_1 = y-Koordinate der Schaltfläche
xm_1 = x-Koordinate des Mauszeigers
ym_1 = y-Koordinate des Mauszeigers

Du mußt dann für die Mausbewegung ständig die aktuellen Koordinaten ermitteln und sicherstellen das:

x_aktuell = x_1 + (xm_1 - xm_aktuell)/fx
y_aktuell = y_1 + (ym_1 - ym_aktuell)/fy

x_aktuell, y_aktuell aktuelle Koordinaten der Schaltfläche
xm_aktuell, ym_aktuell aktuelle Koordinaten des Mauszeigers
fx, fy systemabhängige Korrekturfaktoren zur Umrechnung der Mauskoordinaten in "ma"-Einheiten

Das Problem beruht in der Umrechnung, weil die Werte der Koordinaten ganzzahlig sein müssen, siehe meinen post: viewtopic.php?t=1596

Testweise habe ich folgenden Code geschrieben, mit dem ich eine Schaltfläche auf einem Dialog in x-Richtung (erweiterbar auf y-Richtung) frei verschieben kann, wenn ich knapp neben die Schaltfläche klicke.

Code: Alles auswählen

Dim oDialog1 AS Object 
Dim oForm As Object

Sub StartDialog1 
oForm = DialogLibraries.Standard.Dialog1 
oDialog1 = CreateUnoDialog( oForm )
oDialog1.execute
end sub 

Sub Mouse(Event As Object)
x = Event.X
y = Event.Y
dim a(4)
inhalt = oDialog1.GetControl("CommandButton1")
model = inhalt.Model
a(0) = model.Height
a(1) = model.Width
a(2) = model.PositionX
a(4) = model.PositionY
model.PositionX = x/2.1 
End Sub
Einfach das Makro Mouse den Ereignissen Maustaste gedrückt und Mausbewegung des BasicDialogs zuordnen. Die Konstante 2.1 ist systemspezifisch und dürfte bei Dir anders sein.

Da ich bisher keine Lösung für die Umrechnung der "ma"-Einheiten habe, kann ich Dir keinen fertigen Code anbieten der wirklich exakt funktioniert. Das Prinzip ist jedoch, wie Du siehst, sehr einfach.

Aber vielleicht kennt jemand anderes eine funktionierende Lösung, würde auch mich wegen der Problematik der "ma"-Einheiten interessieren.

Gruß
Stephan
schosch
*
Beiträge: 12
Registriert: Sa, 21.08.2004 20:22

Beitrag von schosch »

Super!
Vielen Dank Stephan. Das Ist wirklich ausführlich, ich setzte mich gleich morgen mal ran.
Gruß
Georg
Antworten