Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Richtige Laufschrift (https://www.delphipraxis.net/452-richtige-laufschrift.html)

theomega 23. Jul 2002 17:34


Richtige Laufschrift
 
Hallo
ich versuche gerade ein Programm zu schreiben, das alle 100 MiliSekunden einen String akualisiert und der soll dann sofort auf eine Laufschrift ausgegeben werden. Das Problem bei allen Alufschriftkomponeneten ist, das sie, sobald sich der String ändert, wieder von vorne anfangen. Will heißen das man meinen String fast gernicht sieht.

Weiß jemand eine Alternative, die diesen Fehler nicht hat????


Tnxs

bdominik

Daniel B 23. Jul 2002 17:45

Hi,

vielleicht kannst du die Aktuelle Position auslesen und beim ändern wieder setzen.

So ungefähr: StartPosition := Letzte Position.

Wo es momentan ist kannst du ja auch so rausfinden. Schau also ob du die Startpos. setzen kannst.

Phoenix 25. Jul 2002 12:13

Eine andere Möglichkeit wäre, die Laufschrift so zu lösen, das sich die Komponente die den String enthält von selber bewegt. Damit bewegt sich auch der Text, und sobald sich der String ändert ändert sich eben nur der String und nicht die Position. Das einzige was komplizierter wäre, wäre das 'rausscrollen' auf einer Seite, denn hier müsste die Position wieder um die Länge des entfernten Buchstabens zurückspringen. Aber dennoch müsste eine Label-Kompo ohne grosse Schwierigkeiten um so eine Scrolling-Methode erweitert werden können.

Die Start- und die Endposition ist durch "Left" und "Left + Width" festgelegt, die Scrollrichtung kann eine neue Eigenschaft sein und die Buchstabenlänge des entfernten Buchstabens ist auch leicht rauszufinden. Dürfte von daher also kein Hexenwerk sein.

Grüßle,

Sebastian

Alfons_G 25. Jul 2002 18:01

:hi:
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 ;)

:coder:

Chris P 12. Mär 2004 08:00

Re: Richtige Laufschrift
 
Zitat:

strBuffer := Copy (strMeinText, 1,1);
Wäre nicht eleganter "strBuffer := strMeinText[1]"?

MisterNiceGuy 12. Mär 2004 08:41

Re: Richtige Laufschrift
 
Hab jetzt nicht alles gelesen, aber wenn du den Code für ne Laufschrift brachst dann hier:
Code:
procedure Timer1Timer(Sender: TObject);
var wort         : string;
    zeichen,hilfe : char;
    i            : integer;
begin
  wort:=label1.caption;
  hilfe:=wort[1];
  for i:=1 to length(wort) do
    if i<length(wort)
      then
        begin
          zeichen:=wort[i+1];
          wort[i+1]:=hilfe;
          hilfe:=zeichen;
        end
      else wort[1]:=zeichen;
  label1.Caption:=wort;
end;
:zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz