Announcement

Collapse
No announcement yet.

Wie funktioniert Drag and Drop mit Shapes?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie funktioniert Drag and Drop mit Shapes?

    Ich muss ein Damespiel programmieren.
    Dabei soll ein rundes Shape per drag&drop
    auf ein viereckiges Shape gelegt werden.
    Das runde Shape soll wenn ein Großteil seiner Fläche auf einem viereckigen Shape liegt, auf diesem auch ausgerichtet werden also rund.left:=feld auf dem es ligt left

    wie funktioniert das?

    kann mir bitte jemand helfen?

  • #2
    das fände ich auch ziemlich nützlich.

    Ich stehe nämlich vor dem selben Problem, hab aber mit Drag&Drop noch nie gearbeitet und weiss noch nicht mal wie man überhaupt ein Shape bewegt kriegt. :

    Comment


    • #3
      Hallo, sowas steht auch in dem Buch, welches ich im Forum-Beitrag Eine eigene Hilfe erstellen, erwähnt habe. Gruß p

      Comment


      • #4
        Hallöchen

        Man könnte ja auch einfach beim OnMouseDown-Event die aktuelle Mausposition mit getcursorpos(P); (wobei P: TPoint ist) speichern und beim Bewegen des Zeigers über das Formular(und andere Objekte) einfach die aktuelle MausPosition mit der gespeicherten vergleichen und das Shape mit Shape.left := Shape.left + (actP.x - oldP.x) bewegen.
        Das müsste dann in etwa so aussehen:

        var
        oldP: TPoint;
        mdown: boolean;

        procedure ..Shape1MouseDown(Sender.., x, y);<BR>
        begin<BR>
        getcursorpos(oldP);<BR>
        mdown := true;<BR>
        end;<BR>
        <BR>
        procedure TForm1.MouseMove(..);<BR>
        var<BR>
        actP: TPoint;<BR>
        begin<BR>
        if mdown then <BR>
        begin<BR>
        getcursorpos(actP);<BR>
        if (actP.x<>oldP.x) or (actP.y<>oldP.y) then<BR>
        begin<BR>
        Shape1.left := Shape1.left + (actP.x - oldP.x);<BR>
        Shape1.top := Shape1.top + (actP.y - oldP.y);<BR>
        if insideRadius(actP) then <BR>
        begin<BR>
        Shape1.left := festerpunkt.x;<BR>
        Shape1.top := festerpunkt.y;<BR>
        end;<BR>
        oldP.x := actP.x;<BR>
        oldP.y := actP.y;<BR>
        end;<BR>
        end;<BR>
        end;<BR>
        <BR>
        procedure Form1.MouseUp(..);<BR>
        begin<BR>
        Mdown := false;<BR>
        end;<BR>
        <BR>
        procedure ..Shape1MouseUp(..);<BR>
        begin<BR>
        Mdown := false;<BR>
        end;<BR>
        <BR>
        function TForm1.insideRadius(P: TPoint): boolean;<BR>
        begin<BR>
        if sqrt(sqr(P.x - festerpunkt.x) + sqr(P.y - festerpunkt.y)) <= Radius then result := true<BR>
        else result := false;<BR>
        end;<BR>
        <BR>
        ..habs nicht getestet, müsste aber in etwa so funktionieren.<BR>
        <BR>
        cu detle

        Comment

        Working...
        X