![]() |
Laufschrift an Panelgröße anpassen
Hallo
Ich erzeuge in einem Timer diese Laufschrift
Delphi-Quellcode:
Nun ist aber das label auf einem Panel mit der größe Height := 97 und Width := 416 bei dem label selber ist AutoSize auf false und die größe des labels entspricht der große des Panels. Wenn jetzt aber das Label (lSong.Caption) zb: nur wenige Zeichen enthält und diese geringer in der gesamtlänge als das Panel insgesamt lang ist, dann fängt die Laufschrift ja nicht genau rechts am ende vom Panel an, sondern schon weiter links je nachdem wieviel Zeichen das Label übergeben wurden. Ich möchte aber erreichen das die Laufschrift immer rechts am ende vom Panel beginnt egal ob das label ein Wort enthält was vielleicht nur zwei Buchstaben (zeichen) besitzt. Wie könnte ich das realisieren ?
sLaufText := lSong.Caption; //caption übergeben
sTmp := sLaufText[1]; //1.zeichen wird sich gemerkt delete(sLaufText, 1, 1); //1.zeichen wird anschließend gelöscht sLaufText := sLaufText + sTmp; //caption + gemerktes zeichen wird sLaufText übergeben labelID3.Caption := sLaufText; //sLaufText wieder an caption übergeben |
Re: Laufschrift an Panelgröße anpassen
Den String anfänglich links mit entsprechender Anzahl von Leerzeichen auffüllen
|
Re: Laufschrift an Panelgröße anpassen
machs mit Canvas.Textout damit sollte es noch genauer gehn
|
Re: Laufschrift an Panelgröße anpassen
vielleicht so
Delphi-Quellcode:
Problem wäre nur das die Schleife ja im Timer ständig wiederholt wird geht also auch nicht :gruebel:
while Length(sLauftext) < Panel.Width do
begin sLauftext := ' ' + sLauftext; end; |
Re: Laufschrift an Panelgröße anpassen
Das ginge schon, wenn Du Dir die Leerzeichen und die Breite des Panels änderst, dann muß die Schleife nur noch ausgeführt werden, wenn sich die Breite ändert.
Ich hab mir mal eine Komponente geschrieben, die sowas kann, hab da auf das Canvas gezeichnet und x immer um 1 reduziert. |
Re: Laufschrift an Panelgröße anpassen
Sunlight hättest du vielleicht ein kleines Beispiel ich weiß diesbezüglich echt nich weiter :( mein Kopf Qualmt :mrgreen:
|
Re: Laufschrift an Panelgröße anpassen
Nicht zu kompliziert denken, das geht ganz einfach:
Delphi-Quellcode:
Natürlich empfielt es sich, das Zeichnen zu optimieren, zB. zuerst auf ein Bitmap, damit es nicht flimmert. :???:
const MyText='Ich wandere von rechts nach links ;-)';
StepWidth=1; var x:Integer; TextWidth:Integer; procedure TForm1.FormCreate(Sender: TObject); begin x:=ClientWidth; TextWidth:=Canvas.TextWidth(MyText) end; procedure TForm1.Timer1Timer(Sender: TObject); begin Dec(x, StepWidth); Refresh; Canvas.TextOut(x, 0, MyText); If x<-TextWidth then x:=ClientWidth; end; |
Re: Laufschrift an Panelgröße anpassen
Hallo Sunlight dein Beispiel funktioniert sehr gut und ich dacke dir dafür. Die Laufschrift fängt jetzt rechts an der PaintBox an und sobald diese links durchgelaufen ist beginnt sie wieder genau rechts am Anfang der Paintbox. Soweit so gut jetzt möchte ich aber wie schon oben im Code beschrieben das die Laufschrift sobald sie zum Teil links verschwindet das rechts Nachschub kommt so wie es oben in dem Code geschieht. Kannst du mir dabei noch weiterhelfen ?
|
Re: Laufschrift an Panelgröße anpassen
Delphi-Quellcode:
Müsste gehen...
const MyText='Ich wandere von rechts nach links ;-)';
StepWidth=1; var x:Integer; TextWidth:Integer; procedure TForm1.FormCreate(Sender: TObject); begin x:=ClientWidth; TextWidth:=Canvas.TextWidth(MyText) end; procedure TForm1.Timer1Timer(Sender: TObject); begin Dec(x, StepWidth); Refresh; Canvas.TextOut(x, 0, MyText); Canvas.TextOut(clientwidth+x, 0, MyText); If x<-clientwidth-textwidth-textwidth then x:=ClientWidth; end; edit: doch nicht :/ |
Re: Laufschrift an Panelgröße anpassen
Geht fast der erste Durchlauf funktioniert aber ab dem zweiten Durchlauf bleibt der kommende text von rechts in der Mitte stehn und es kommt wieder neuer Text von rechts und der zuvor stehengebliebene verschwindet wieder u.s.w auch kein schlechter efekt :-D wir kommen der Sache langsam auf der Spur :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 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-2025 by Thomas Breitkreuz