Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 Uhr.
Seite 1 von 2  1 2      

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