Hallo Redak,
Es gibt die Möglichkeit über TThreadYield bzw. TThread (
http://docwiki.embarcadero.com/CodeE...Yield_(Delphi)) gleichzeitig Dinge zu erledigen aber all zu sinnvoll ist das in deinem Fall nicht. Der Schlüssel hier ist das Timing. Anstatt deinen Routinen feste Positionen zu liefern, könntest du ihnen einen Timecode liefern mit dessen dann die Position innerhalb der Routine ermittelt wird.
Hier mal ein bisschen Code um das zu veranschaulichen.
Das füllen etwas kürzer...
Delphi-Quellcode:
procedure TForm1.Buchstaben();
var
i:integer;
begin
setlength(dynAr,26);
setlength(forDisplay,6);
// buchstaben füllen
for i := 0 to 26 do
dynAr[i]:= Chr(97+i);
// buchstaben für anzeige
for i := 0 to 5 do
forDisplay[i]:= dynAr[random(26)];
end;
Textausgabe mit Timecode...
Delphi-Quellcode:
point1 : TPoint; //Startposition des Textes
...
point1.X := 100;
point1.Y := -10;
...
procedure TForm1.Bewegen(const timecode, anim_delay: Cardinal);
var
i: Integer;
txt_pos: TPoint;
const
add = Point(0, 100); // Wo soll der Text am Ende sein?
offset = Point(100, 0); // Buchstabenabstand
begin
txt_pos.X := Round(((timecode / anim_delay) * add.X) + point1.X);
txt_pos.Y := Round(((timecode / anim_delay) * add.Y) + point1.Y);
for i := 0 to High(TextOut)-1 do
canvas.TextOut(txt_pos.X + (i*offset.X), txt_pos.y + (i*offset.Y), forDisplay[i]);
end;
Jetzt noch das Timing und ausführen der Animationen
Delphi-Quellcode:
procedure TForm1.Animate;
var
TickCount, TickCountStart, TickCountEnd, timecode: Cardinal;
const
anim_delay = 5000; // Wie lange soll es dauern?
begin
TickCountStart := GetTickCount;
TickCountEnd := TickCountStart + anim_delay;
repeat
TickCount := GetTickCount;
timecode := TickCount - TickCountStart;
// Deine Animationen
Bewegen(timecode, anim_delay);
until (TickCountEnd <= TickCount);
end;
Der Code ist ungetestet sollte aber hoffentlich so funktionieren. Falls du planst, später noch mehrere Animationen zu benutzen würde sich eine abstrakte Klasse TAnimation empfehlen, um das ganze Timing etwas eleganter zu gestalten. Prinzipiell kann ich dir aber auch Andora2D ans Herz legen, da es bereits alle benötigten Klassen für Animationen etc. mitbringt.