![]() |
Re: Flickernder Newsticker - ich hab bald alle Techniken dur
Zitat:
|
Re: Flickernder Newsticker - ich hab bald alle Techniken dur
Das ist zwar eine gute Idee (siehe mein Punkt 6), allerdings das du dann ein Problem, wenn du einen längeren Text bekommmst (sagen wir 10000 Zeichen, also widestring). Stell dir das mal als farbiges Bitmap vor mit 150px Höhe und ~10.000*50px = 500.000 px (!) Breite, das macht kein Arbeitsspeicher mit...
Irgendwer ein Beispiel für ScrollDC? |
Re: Flickernder Newsticker - ich hab bald alle Techniken dur
War Punkt 6 schon immer da oben :stupid: ? Bei langen Texten pufferst du einfach die doppelte (oder dreifache, ...) Bildbreite, das Neuberechnen verschiebst du optimalerweise in einen eigenen Thread.
|
Re: Flickernder Newsticker - ich hab bald alle Techniken dur
Hat noch keine mitr ScrollDC gearbeitet? Wie siehst mit ScrollWindow aus?
Edit: Mein aktuelle Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var ende, x: Integer; ScrollRect, ClipRect, UpdateRect: TRect; begin ende := GetTickCount + 30000; x := 0; while (GetTickCount < ende) and not cl do begin inc(x, 2); // backbuffer.Clear(clWhite32); // backbuffer.Font.Size := 72; // backbuffer.Textout(0, 0, 'Funktioniert das denn auch mit etwas längeren Texten noch flüssig und wenn die Schriftgröße 150 beträgt?'); // BitBlt(PaintBox321.Canvas.Handle, 0, 0, width, 150, backbuffer.Canvas.Handle, 0, 0, SRCCOPY); ScrollRect := PaintBox321.BoundsRect; ClipRect := PaintBox321.BoundsRect; ScrollDC(PaintBox321.Canvas.Handle, -2, 0, ScrollRect, ClipRect, 0, @UpdateRect); InvalidateRect(PaintBox321.Canvas.Handle,@updaterect,True); BitBlt(PaintBox321.Canvas.Handle, width-10, 0, 2, PaintBox321.Height, backbuffer.Canvas.Handle, x, 0, SRCCOPY); // ReleaseDC(Handle, PaintBox321.Canvas.Handle); // PaintBox321.Buffer.Clear (clWhite32); // PaintBox321.Buffer.Font.Size := 72; // PaintBox321.Buffer.Textout(x, 0, 'Funktioniert das denn auch mit etwas längeren Texten noch flüssig und wenn die Schriftgröße 150 beträgt?'); // PaintBox321.Flush; sleep (2); Application.ProcessMessages; // if x <= -50 then x := 800 // else dec (x, 2); end; end; |
Re: Flickernder Newsticker - ich hab bald alle Techniken dur
Delphi-Quellcode:
Der text wird nicht langsamer es dauer nur länger bis ein Buchstabe durchgescrollt ist weil er breiter ist. Es scheint also nur so als ob es langsamer wäre.
[quote="berens"]@jfheins: Das sieht generell schonmal ganz gut aus, (das obligatorische:) aaaber, mit steigender Schriftgröße (z.B. 150) und einem längeren Text (s.u.) wird der Ticker immer langsamer.
Die Geschwindigkeit muss also von der Schriftgrösse abhängig sein. Und das dann noch um "timebased movement" erweitern. Dann braucht man nur noch einen timer/Thread der 25 mal pro Sekunde aufgerufen wird. (Für die menschliche Wahrnehmung genügen ungefähr 25 Bilder pro Sekunde, um eine "ruckelfreie" Illusion der Kontinuität zu erzeugen" Wikipedia) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 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