Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - was muss ich tun...button bewegen


Tobias - Mo 14.10.02 21:46
Titel: was muss ich tun...button bewegen
hi leuts!

eine frage:

ich habe eine form, auf dieser form befindet sich 1 button, wie kann ich den dann im 2 sek. takt "wandern" lassen? der button soll sich alle 2 sek. an eine bestimmte koordinate bewegen. hab schon einiges ausprobiert, nur irgendwie will das nicht...

i hope i get help soon ;)


Christian S. - Mo 14.10.02 22:04

Hi!

Mit einem Timer kannst Du dieses Zeitintervall realisieren. Wenn Du dann in das OnTimer-Ereignis einen Code setzt, der den Left- und Top-Wert des Buttons so ändert, wie Du es willst, solltest Du das bekommen, was Du haben willst.

MfG,
Peter


Tobias - Di 15.10.02 14:40

könnte mir da jemand nen source für gegeben? bitte.


Christian S. - Di 15.10.02 14:46

Hi!

Aber ohne Gewähr, mein Delhi ist noch nicht installiert, deswegen kann ich den Code nicht testen. Also, du suchst Dir in der Komponentenleiste von Delphi irgendwo die Komponente TTimer (sorry, weiß nicht auswendig, wo!)

Da setzt Du dann also zwei Eigenschaften: einmal musst du das Intervall in Millisekunden eingeben, dann musst Du mit Enabled angeben, ob der Timer schon zählen soll, oder nicht. Beide kannst Du auch während der Laufzeit setzen.

Der Timer hat ein OnTimer-Ereignis. Da schreibst Du folgenden Code rein:


Quelltext
1:
2:
Button1.Left:=Button1.Left+10;
Button1.Top:=Button1.Top+10;


Ist Enabled=true und Intervall=1000 wird der Button jede Sekunde zehn Pixel nach Links und 10 nach unten springen.

MfG,
Peter


Tobias - Di 15.10.02 14:50

danke :). das hat geklappt


LCS - Di 15.10.02 14:51

Naaa gut. Wer so schön bitte sagt :mrgreen:

Formular mit einem Button und einem Timer.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    x, y, vx, vy: Integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
   Timer1.Enabled  := not Timer1.Enabled;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   x  := x + vx;  //Bewegung für x und y festlegen
   y  := y + vy;
   //Button ist am linken Rand
   if  x <= 0 then
       vx  := vx * -1;
   //Button ist am rechten Rand
   if  x >= ClientWidth - Button1.Width then
       vx  := vx * -1;
   //Button ist am oberen Rand
   if  y <= 0 then
       vy  := vy * -1;
   //Button ist am unteren Rand
   if  y >= ClientHeight - Button1.Height then
       vy  := vy * -1;
   Button1.Left := X;
   Button1.Top   := Y;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   x  := Button1.Left;
   y  := Button1.Top;
   vx  := 10;
   vy  := 10;
end;

end.


Gruss Lothar


LCS - Di 15.10.02 14:54

Mal wieder zu spät. user defined image


Christian S. - Di 15.10.02 14:57

Dafür aber vollständiger als meins!


Frischling - Mi 16.10.02 16:00

hihu LCS.... :lol:

ich habe Dein Beispiel einfach mal kopiert....
auf meine Form habe ich nen Button und nen Timer gesetzt.

tscha...nur passieren tut nix...
da kann ich auf dem Button rumklicken wie ich will der bewegt sich kein stück :o(


Christian S. - Mi 16.10.02 16:33

Hi!

Ich habe es gerade ausprobiert: der Code von LCS funktioniert.

Du solltest beachten: der Timer ist AKTIV, wenn das Programm startet, der erste "Hüpfer" kommt aber erst nach einer Sekunde. Kann es sein, dass Du direkt nach dem Start des Programmes auf den Button klickst?

MfG,
Peter