2009-08-13 11 views
2

Ich habe einige benutzerdefinierte Steuerelemente (TCustomControl) in Delphi erstellt, die ich zur Laufzeit verschieben kann, aber nur eins nach dem anderen. Wie kann ich zwei oder mehr dieser Steuerelemente zur Laufzeit wieder auswählen und sie alle zusammen mit der Maus verschieben?So wählen und verschieben Sie mehrere Steuerelemente zur Laufzeit

Vielen Dank.

Antwort

1

Ich einmal eine Komponente namens handles verwendet, dass, wenn ich mich richtig erinnere war nicht zu schwierig, auf die späteren Versionen von Delphi zu aktualisieren und Multi-Select unterstützt.

+0

Ich habe diese Komponente verwendet und Multi-Select mit einigen Änderungen hinzugefügt. Der einzige visuelle Fehler ist das Mausauswahlrechteck, das unter die Steuerelemente (da ich es auf der übergeordneten Leinwand male) und der Offset der tatsächlichen Steuerelemente ist +2 Pixel auf beiden Achsen. Vielen Dank. – pani

2

Wenn Sie keinen einfacheren Weg finden können, können Sie es immer manuell tun. Behalte eine Liste aller ausgewählten Steuerelemente. Wenn der Ziehvorgang beginnt, erstellen Sie eine weitere Liste, die TPoint-Werte enthält, die angeben, wie weit die Ober- und die Links-Eigenschaften eines Steuerelements von der Mausposition auf beiden Achsen entfernt sind. Wenn der Benutzer dann das Steuerelement zieht, werden die ausgewählten Steuerelemente ständig aktualisiert, um sie an den richtigen relativen Positionen zum Mauszeiger zu halten.

+1

Ich dachte etwas wie Ihren Vorschlag, obwohl es nur Delta-Werte der Position für die Hauptsteuerung benötigt, die ich verschieben werde und diese Deltas auf die anderen Kontrollen anwenden werde. Also, wenn control1 geändert wird. Links um 3 Pixel und. Top 10 Pixel dann controlN.Left: = controlN.Left + DeltaX; controlN.Top: = controlN.Top + DeltaY; Ich habe einige Tests mit diesem durchgeführt, aber ich kann den Rest der Kontrollen nicht bewegen, während ich den Master verschiebe. – pani

0

Wie wäre es mit einem commercial solution? Der Screenshot zeigt Ausrichtungswerkzeuge, die darauf hindeuten, dass er die Mehrfachauswahl unterstützt.

+0

Dies ist die erste Bibliothek, die ich angeschaut habe, aber ich entschied mich, sie selbst zu implementieren, da ich bereits den Großteil der benötigten Funktionalität programmiert hatte. – pani

3

Eine andere kommerzielle Lösung wäre von DevExpress: LayoutControl. Es ermöglicht Drag-and-Drop, Gruppieren, vollständiges Neuanordnen, Verstecken und Hinzufügen von Komponenten zur Laufzeit.

+0

Ich möchte wirklich nicht mit einem Drittanbieter, insbesondere DevExpress, für etwas so einfach zu sperren. – pani