Hallo Benjin,
ich wuerde es mit Timern machen:
Delphi-Quellcode:
const
TimeOut = 5;
Step = 2;
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Tag := Memo1.Left;
Timer1.Enabled := False;
Timer2.Enabled := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer2.Enabled := False;
Timer1.Interval := TimeOut;
Timer1.Enabled := True;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled := False;
Timer2.Interval := TimeOut;
Timer2.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
Memo1.Left := Memo1.Left-Step;
Timer1.Enabled := (Memo1.Left + Memo1.Width) > 0;
if not Timer1.Enabled then
ShowMessage('Done');
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Timer2.Enabled := False;
Memo1.Left := Memo1.Left+Step;
Timer2.Enabled := Memo1.Left < Memo1.Tag;
if not Timer2.Enabled then
ShowMessage('Done');
end;
Erklaerungen:
- die Konstanten "TimeOut" und "Step" regeln gemeinsam die Geschwindigkeit, spiel einfach damit rum bis sie dir passen. Je kleiner TimeOut und je groesser Step desto schneller fliegt das Memo rum.
- Im OnCreate schalten wir die Timer mal aus und speichern die Position vom Memo.
- Wird auf den ersten Button geklickt, so schalten wir den 2. Timer aus, d.h. wir stoppen eine evtl. Rechtsbewegung des Memos. Anschliessend setzen wir das Timeout fuer den Timer und schalten ihn ein. Analog verhaelt es sich mit Button2
- Im OnTimer-Event schalten wir den Timer sicherheitshalber aus, ziehen Step von Memo1.Left ab, und schalten den Timer nur wieder ein, wenn die rechte Kante des Memos noch sichtbar ist. Analog geht es auch fuer Timer2.
Die if-Abfrage mit ShowMessage kannst du auch entfernen, sie ist nur zur Demonstration da, damit du siehst dass das Memo auch aufhoert sich nach links zu bewegen
Greetz
alcaeus