OnMouseDown & OnStartDrag
-
Das ist mir fast peinlich, dass ich hier so viel Posten muss...
naja... okay... ich hoffe ihr nehmt es mir nicht übel...Ich hab ein wahrscheinlich leichtes, kleines Problem. Ich habe eine OnMouseDown Funktion entwickelt, die jetzt wiederum OnStartDrag aufrufen soll. Und meine Frage ist einfach, wie ich in der OnMouseDown-Routine die OnStartDrag-Routine aufrufen kann?!?
(Es geht um ein TImage, auf dem ich gezeichnet habe... wenn an einer bestimmten Stelle die Maus gedrückt und verzogen wird, soll etwas anderes gezeichnet werden. Wird die Maus an einer anderen Stelle gedrückt und verzogen, soll nichts passieren..., deshalb gehe ich den Weg über OnMouseDown...)
-
und wozu brauchst du das OnStartDrag?
BCB-Hilfe zu OnStartDrag schrieb:
Das Ereignis OnStartDrag tritt auf, wenn der Benutzer mit dem Ziehen des Steuerelements oder eines in ihm enthaltenen Objekts beginnt.
zum Zeichnen von Objekten (z.B. Markierungsrechtecke) kannst Du OnMouseMove und OnMouseDown/Up verwenden.
-
Ist es mit OnStartDrag nicht möglich, eine Aktion auszuführen, wenn man zwei Koordinaten in einem Timage hat, die jetzt in einer Bestimmten Farbe sind und genau auf diese Koordinaten geklickt und gezogen wird? also zumindest klappt es, eine Aktion auszuführen, wenn einfach nur auf die jeweilige andersfarbige stelle geklickt wird oder die Mas einfach nur über diese Stelle rüberwandert. Dann muss es doch eine Möglichkit geben, eine Aktion auszuführen, wenn dieser Punkt angeklickt wird und danach die Maus verzogen wird... oder ist das unmöglich?
-
Wie Sunday schon sagte, verwendet man für sowas eigentlich OnMouseMove und OnMouseDown/Up. Bei OnMouseDown die Position merken sowie ein Flag für die Aktion setzen, dann in OnMouseMove die entsprechende Aktion durchführen und in OnMouseUp abschließen.
-
Okay, danke, ich glaub ich hab nen Ansatz
ist einfacher als ich dachte
einfach überprüfen ob linke maustaste beim ziehen gedrückt ist
ganz easy:void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(Shift.Contains(ssLeft)) { ... }; }Klappt jedenfalls ganz gut für meine Zwecke. Muss ich es zwar noch abändern, aber ansonsten ne nette lösung
