Label verschieben


  • Torbolo
  • 1722 Aufrufe 8 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Label verschieben

    Guden!

    Ich bastel momentan ein bisserl mit Delphi rum und stehe schon vor einem Problem. :rolleyes:
    Und zwar möchte ich ein Label verschieben. Dies sollte sich von A nach B bewegen und nicht nach B "springen".

    Denke, daß mir hier jemand weiterhelfen kann (gell, Transmitter! :D )!

    MfG Torbolo
  • Hi,

    wenn ich dich richtig verstehe, soll es so aussehen, wie das Laufband in deiner Sig ?

    Leider weiss ich zwar nicht, wie das in Delphi genau aussieht, aber vielleicht hilft es dir ja trotzdem:

    Baue eine for-Schleife, in der du die A-Position zeitlich verzögert höchzählst, bis du die B-Position erreicht hast. zB so:

    Quellcode

    1. for ( A<B ; A++)
    2. {
    3. Label.Position = A;
    4. Verzögere_um_0,5_Sekunden(); //Keine Ahnung, wie das in Delphi geht
    5. }


    Ist es das, was du meinst ?
  • ui .. delphi ist schon ewig lang her bei mir .. ( ver 3 ;))

    aber guck mal .. hier habe ich noch einen code schnipsel für dich:

    Quellcode

    1. Einfach die Panel.Left oder Panel.Top Eigenschaft benutzen!
    2. private
    3. { Private-Deklarationen }
    4. xOld, yOld : Integer; // merken der x,y Koordinaten für OnMouseDown Ereignis
    5. Moving : Boolean; // Soll Objekt verschoben werden ?
    6. // Moving
    7. procedure TForm1.FormCreate(Sender: TObject);
    8. begin
    9. Moving := False;
    10. end;
    11. // Wenn Linke Maustaste im Panel gedrückt wird
    12. procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    13. begin
    14. xOld := x; // merke mir die x,y Koordinaten wo Maus im Panel geklickt wurde
    15. yOld := y;
    16. Moving := True; // Bewegen starten
    17. Label1.Caption := '"' + IntToStr(x) + '", "' + Inttostr(y); // ist nur eine Anzeige
    18. end;
    19. // Bewegen des Objektes wenn Moving = True
    20. procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    21. begin
    22. if (Moving) then begin // Nur wenn Maustaste immer noch gedrückt ist
    23. Panel1.Left := Panel1.Left + (x - xOld); // Setzen der neuen Left ...
    24. Panel1.Top := Panel1.Top + (y - yOld); // ... und Top Koordinaten des Panels
    25. end;
    26. end;
    27. // Maustaste wird gehengelassen
    28. procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    29. begin
    30. Moving := False; // Bewegen beenden
    31. end;
    Alles anzeigen


    ps: und ..

    Denke, daß mir hier jemand weiterhelfen kann (gell, Transmitter! )!

    .. feuerstein ist auch fähig! ;)
  • .. feuerstein ist auch fähig!

    He he - das hab ich auch nicht angezweifelt! ;) Danke an euch BEIDE! :D

    Werds nachher mal ausprobieren. Hatte sowas schonmal aufm 486 gecodet. Da konnte man einfach in ner for-Schleife die Koordinaten bei jedem Durchlauf um eins (zB) erhöhen. Das Ganze sah dann wie ne Bewegung aus. Allerdings ist meine jetztige Höllenmaschine ein bisserl schneller und da springt das Label trotz dieser Schleife direkt an die nächste Position. :D

    Werd mich nochmal melden...

    MfG Torbolo
  • Timer in Delphi ?

    Das Problem kenn' ich aus Javascript. Da kann man dann aber mit einem Timer arbeiten.

    Gibt es in Delphi denn keinen Timer, mit dem man eine ''exakte'' Zeit vorgeben kann um die Sache prozessorunabhängig zu gestalten ?

    Ansonsten kann man natürlich auch mehrere for-Schleifen ineinander verschachteln, aber das macht die Sache auf langsameren Rechnern auch entsprechend - ''schleichend'' :(