![]() |
Ticker-Text
Hoi,
wie stellt man es unter Delphi an einen String als Ticker auf einem Form von links nach rechts wiederholt durchlaufen zu lassen. Ich hätte da nicht mal ne Idee?! :| |
Re: Ticker-Text
Zitat:
Nimm ein Label und eine TTime-Komponente. Das Intervall von TTime legst du auf einen geeigneten Wert (z.B.: 100ms) Tritt das Ereignis ein -also der Timer hat 100ms geliefert- (OnTimer) veränderst du die Caption des Labels. Du schneidest vorne ein Zeichen des Strings der Caption ab und setzt hinten ein Zeichen deines Testes hin. Das müsste mit einer Zählvariablen gut klappen. Leider kann ich dir keinen Source liefern, da ich die Hilfe für ttimer.ontimer nicht ganz verstanden habe. Schau es dir mal an. Falls du weißt wie man ein "TNotifyEvent"(siehe "Hilfe") behandelt, dürfte es kein Problem mehr sein. MfG Phil |
thx
aber damit kann ich wenig anfangen. Gibt es vielleicht eine Komponente die dies realisieren kann?? |
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var Text : STRING; begin Text := Copy (Label1.Caption,2,length(Label1.Caption)-1)+ Label1.Caption[1]; Label1.Caption := Text; end; |
Anfangs sollte man aber noch imho das Intervall setzen.
Also: timer1.interval:=100; (*ms) Da die Standarteinstellung für den Timer 1000 (also 1s) ist und dies dann eher nach nix aussieht. (Kleine Zwischenfrage ohne unnötigerweise einen neuen Thread zu eröffnen) @Lucky: Ist die procedure automatisch die OnTimer Eigenschaft, bzw. wird diese Procedure nach einem Intervall aufgerufen? Ich verstehe immer noch nicht die "Hilfe" von Delphi: Zitat:
(Unter Link TNotifyEvent steht): Zitat:
MfG Phil |
HI !
Kurz zusammengefasst: Die Procedure für OnTImer wird immer dann ausgeführt, wenn das Zeitintervall verstrichen ist. Gleichzeitig wird das Intervall wieder auf seinen Ausgangswert gestellt und läuft wieder ab, usw. D.h.: Interval: 1000 entspricht 1 Sekunde Nach einer Sekunde wird die Procedure Timer1OnTimer(...) ausgeführt, dann nach einer weiteren Sekunde usw. Das Problem an der obigen Lösung ist, dass das Label anfängt zu flackern (zumindest bei mir :-)), wenn man ein Intervall von 100 einstllt. Und ein größeres Intervall macht da keinen Sinn. Wenn also einer von euch eine Komponente kennt, dann her damit !! Hatte das Problem schon vor einem Jahr versucht zu lösen, war aber zu faul mir eine vernünftige Kompo zu schreiben. Gruß, Helld |
Moin Zusammen,
da ich die Idee als solche ganz witzig fand, hab' ich das mal in eine kleine Kompo gegossen, aber, wie Helld schon so schön sagte, das Flackern nervt. Wenn jemand eine Idee hat, wie man das verhindern kann... |
Hallo Zusammen nur so als Idee:
Ich habe ein Label auf ein Panel gelegt Rest siehe Code
Delphi-Quellcode:
dieses Konstrukt flacker bei mir nicht sichtbar
procedure TForm1.Timer1Timer(Sender: TObject);
begin if label1.left = 0 then begin if label1.Width = 0 then begin label1.Left := panel1.Width; label1.Width := 32; // gewünschte Anfangsbreite end else begin label1.Width := label1.Width -1; end; end else begin label1.left := label1.left -1; end; end; procedure TForm1.FormCreate(Sender: TObject); begin timer1.Interval := 10; timer1.Enabled := true; panel1.Doublebuffered:=true; end; Gruss Roger |
Moin Zusammen,
nur mal so ein Schnellschuss auf Basis von TStaticText, damit das DoubleBuffered schon in der Kompo enthalten ist. Ruckelt aber noch ganz schön. Wer's optimieren will: Nur zu ;-)
Delphi-Quellcode:
unit csTickerStatic;
interface uses stdctrls,extctrls,classes; type TcsTickerStatic = class(TStaticText) private FsTickerText : string; FcInterval : cardinal; FTimer : TTimer; FfRunning : Boolean; procedure OnTimer(Sender : TObject); function GetRunning: Boolean; public constructor Create(AOwner : TComponent); override; procedure Start; procedure Stop; property TickerText : string read FsTickerText write FsTickerText; property Interval : cardinal read FcInterval write FcInterval; property Running : Boolean read GetRunning; end; procedure Register; implementation procedure Register; begin RegisterComponents('csKompos',[TcsTickerStatic]); end; { TcsTickerStatic } constructor TcsTickerStatic.Create(AOwner: TComponent); begin inherited Create(AOwner); self.DoubleBuffered := true; self.Autosize := false; FsTickerText := 'Tickertext '; self.Caption := FsTickerText; self.Width := 100; self.Height := 16; FcInterval := 100; FTimer := TTimer.Create(self); FTimer.Interval := FcInterval; FTimer.Enabled := false; FTimer.OnTimer := OnTimer; FfRunning := false; end; function TcsTickerStatic.GetRunning: Boolean; begin Result := FTimer.Enabled; end; procedure TcsTickerStatic.OnTimer(Sender: TObject); begin if Length(FsTickerText) = 0 then begin exit; end; FTimer.Enabled := false; self.Caption := FsTickerText; FsTickerText := copy(FsTickerText,2,Length(FsTickerText))+FsTickerText[1]; FTimer.Enabled := true; end; procedure TcsTickerStatic.Start; begin FTimer.Enabled := true; end; procedure TcsTickerStatic.Stop; begin FTimer.Enabled := false; end; end. |
das ist mir einfach noch zu hoch...
hab erstmal luckie's Vorschlag weiterverwendet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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