Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Flickernder Newsticker - ich hab bald alle Techniken durch (https://www.delphipraxis.net/65747-flickernder-newsticker-ich-hab-bald-alle-techniken-durch.html)

Khabarakh 21. Mär 2006 10:23

Re: Flickernder Newsticker - ich hab bald alle Techniken dur
 
Zitat:

Zitat von berens
Delphi-Quellcode:
var
  ende, x: Integer;
begin
  ende := GetTickCount + 30000;
  x := 800;

  while GetTickCount < ende do
  begin
    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 (0);
    Application.ProcessMessages;
    if x <= -50 then x := 800
    else dec (x, 2);
  end;
end;

So wird das sicher nichts. Da der Text statisch ist, solltest du ihn in einem eigenen Bitmap sichern und dieses dann versetzt auf den Paintboxbuffer zeichnen. Damit sollten >100 FPS kein Problem sein.

berens 21. Mär 2006 10:27

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?

Khabarakh 21. Mär 2006 10:39

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.

berens 21. Mär 2006 11:54

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;

Gandalfus 22. Mär 2006 11:39

Re: Flickernder Newsticker - ich hab bald alle Techniken dur
 
Delphi-Quellcode:
[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.
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.
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.
Seite 2 von 2     12   

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