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 Zeile bzw. String fließen lassen? (https://www.delphipraxis.net/141074-zeile-bzw-string-fliessen-lassen.html)

AlexII 1. Okt 2009 20:32


Zeile bzw. String fließen lassen?
 
Wie lasse ich ein Label String fließen? Ist für nen Player gedachte, die Anzeige des Künstlers bzw. des Liedes ist manchmal zu lang, muss deswegen von rechts nach links laufen.

Danke!

Klaus01 1. Okt 2009 20:39

Re: Zeile bzw. String fließen lassen?
 
.. vorne einen Buchtstaben löschen und hinten einen anfügen

Grüße
Klaus

AlexII 1. Okt 2009 20:43

Re: Zeile bzw. String fließen lassen?
 
Hm.... :gruebel: wie geht das den? :gruebel:

Klaus01 1. Okt 2009 20:46

Re: Zeile bzw. String fließen lassen?
 
Zitat:

Zitat von AlexII
Hm.... :gruebel: wie geht das den? :gruebel:

Delphi-Quellcode:
for i:=1 to maxLaenge do
  label1.caption:=copy(s,i,i+maxLaenge);
Delphi-Referenz durchsuchencopy

Vorher den String vielleicht noch so zusammenkopieren,
das er die Länge von 2 x maxLänge hat.
Vielleicht mit dem "Sichtfenster" etwas herumspielen.
Grüße
Klaus

rollstuhlfahrer 1. Okt 2009 20:46

Re: Zeile bzw. String fließen lassen?
 
Nimm ein Panel, plaziere dein überlanges Label darauf und subtrahiere von dem .Left-Wert des Labels immer wieder 1. Irgendwann ist dann dein ganzer Text verschwunden. Spätestens dann solltest du dein Label.Left wieder auf 0 setzen.

Bernhard

PS: Das Panel brauchst du, damit dein Text irgendwo rauslaufen kann und 2. dass dein Text eine definierte Grenze hat. Ich hab das mal gemacht, da hab ich allerdings den Text 4x hintereinander geschrieben (für kurze Texte) und dann so die Position verändert, dass es endlos fließend war.

turboPASCAL 1. Okt 2009 20:59

Re: Zeile bzw. String fließen lassen?
 
So:
http://www.delphipraxis.net/internal...=954088#954088

oder so:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);

  function ScrollText(TheScrollingText: String): String;
  begin
    Result := Copy(TheScrollingText,2,length(TheScrollingText)-1)+TheScrollingText[1];
  end;

begin
  Form1.Caption := ScrollText(Form1.Caption);
end;
oder janz andersch...

AlexII 1. Okt 2009 21:31

Re: Zeile bzw. String fließen lassen?
 
Nach dieser Methode blinkt die Anzeige zu stark (zu niedrige Frequenz) und wenn man Interval verkleinert wird sie viel zu schnell. :roteyes:

hugo1990 1. Okt 2009 21:46

Re: Zeile bzw. String fließen lassen?
 
Zu dem Blinken würde ich sagen setz mal die Eigenschaft Doublebuffered von der From und vom Panel auf True.
Und allgemein zum Thema, ich hätte das ganze nicht mit einem Label gelöst sondern übers Canvas, aber das muss jeder selber wissen, wie er es am liebsten macht.

turboPASCAL 1. Okt 2009 22:10

Re: Zeile bzw. String fließen lassen?
 
Ich habe ja schon zwei nette lösungen vorgegeben.
Version a) ist Canvaswork und Version b) Buchstabenschubbsen...

;)

NickelM 2. Okt 2009 03:02

Re: Zeile bzw. String fließen lassen?
 
Ich hab noch eine bessere :mrgreen:
Das ist halt von links nach rechts. Ich denk mal du bekommst das auch dan anders rum hin :zwinker:
Habs getestet Flackert net so und Sieht super aus xD
Brauchst nen Timer und ne PaintBox :mrgreen:
Delphi-Quellcode:
var
  Text1 : String;
  StartPos, Width1 : Integer;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Text1 := 'Hallo Welt'; //Dein Text den du haben willst
Width1 := PaintBox1.Canvas.TextWidth(Text1); //Länge des Textes, damit mach herausfinden kann von wo man anfangen muss
StartPos := -Width1; //Anfangen mit dem Text hereinschieben
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
with PaintBox1 do
begin
Canvas.FillRect(ClientRect); //Alter Text löschen
If StartPos <> PaintBox1.Width then //Wenn die Breite der Pos des Textes nicht erreicht hat
Canvas.TextOut(StartPos,0,Text1) //Text ausgeben
else
StartPos := -Width1; //Wenn er das Ende erreicht hat wieder von vorne Anfangen
Inc(StartPos,1); //Pos erhöhen an der 1 kannst du auch ne andere Zahl machen, damits schneller geht oder so xD
end;
So einfach ist das :mrgreen:
Viel Spass damit

Gruß NickelM

Norbert987 2. Okt 2009 09:27

Re: Zeile bzw. String fließen lassen?
 
Schau dir mal die Jedikomponente an. Da habe ich vor einer Weile eine solche Komponente gesehen.

GPRSNerd 2. Okt 2009 10:11

Re: Zeile bzw. String fließen lassen?
 
Zitat:

Zitat von NickelM
Habs getestet Flackert net so und Sieht super aus xD

Sorry aber hier flackert das wie Sau!

jaenicke 2. Okt 2009 10:22

Re: Zeile bzw. String fließen lassen?
 
Zitat:

Zitat von GPRSNerd
Zitat:

Zitat von NickelM
Habs getestet Flackert net so und Sieht super aus xD

Sorry aber hier flackert das wie Sau!

Das hängt unter anderem vom Betriebssystem ab. Unter Vista flackert so etwas zum Beispiel deutlich weniger als noch unter XP oder früher, da das dort so ähnlich wie DoubleBuffered funktioniert bei der Anzeige.
Zudem kommt es auf die Timerfrequenz an. Und DoubleBuffered sollte in jedem Fall auf True stehen.

GPRSNerd 2. Okt 2009 10:27

Re: Zeile bzw. String fließen lassen?
 
Ja, unter XP ist das wirklich ein Graus, obwohl Doublebuffered an ist. Die Komponente von den Jedis (JvScrollText) ist aber genauso schlecht.
Ich werds mal mit den Umschalten von zwei übereinander liegenden Paintboxen versuchen...

jaenicke 2. Okt 2009 10:29

Re: Zeile bzw. String fließen lassen?
 
Ich sehe auch gerade, dass in dem Quelltext der komplette Clientbereich überzeichnet wird. Das verursacht natürlich starkes Flackern. Es sollte nur der Text selbst akualisiert werden, aber nicht die ganze PaintBox, wenn diese größer als der Text ist.


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

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