ich gehe mal davon aus, dass sich die Länge des Strings nicht ändert, sonst ist es kaum möglich, ein brauchbares optisches Bild zu erreichen.
Die übliche Art, eine Laufschrift zu erzeugen, besteht darin, vom String das vordere Zeichen zwischenzuspeichern, abzuschneiden und hinten wieder anzufügen.
Code:
strMeinText := 'Meine schöne lange Laufschrift ...';
...
// In Timer-Ereignis
...
strBuffer := Copy (strMeinText, 1,1);
strMeinText := Copy(strMeinText,2,Length(strMeinText) ) + strBuffer;
LaufLabel.Caption := strMeinText;
Hierbei wird natürlich, wenn Du den String ersetzt, dieser von Anfang an gezeigt.
Für Deine gewünschte Fumktion musst Du zusätzlich eine Integer-Variable mitführen, welche sich die aktuelle Anfangsposition merkt. Also:
Code:
strBuffer := Copy (strMeinText, 1,1);
Inc(intPosition);
if intPosition > Length(strMeinText) then
intPosition := 1;
strMeinText := Copy(strMeinText,2,Length(strMeinText) ) + strBuffer;
LaufLabel.Caption := strMeinText;
Sobald Du Deinen String änderst, ruftst Du eine Funktion auf, die Dir Deinen neuen String so zurechtbastelt, wie wenn er schon in der Laufschrift gestanden wäre:
Code:
strMeinText := AktuellerText(strMeinText, intPosition);
...
function AktuellerText (Text: string; Position: integer): string;
var
Buffer: string;
begin
Buffer := Copy(Text, 1, Position);
Text := Copy(Text, Position + 1, Length(Text));
Result := Text + Buffer;
end;
Ich hab' es jetzt allerdings nicht getestet, sondern direkt im Browser getippt