![]() |
Scrollen von Text per GDI sieht abgehakt aus ...
Hiho,
Flackern ist bei mir kein Problem, aber wenn ich Text scrolle (vertical) dann sieht das irgendwie nicht sehr befriedigend aus. Es hat irgendwas abgehaktes. Selbst bei ca 50ms, was IMO der maximalen Lesegeschwindigkeit entspricht, erscheint das Scrolling abgehakt. Gibt es da irgendwelche Smoothing-Algorithmen o.ä.? Wer sehen möchte, was genau ich meine, der kann mal meine ![]() Danke im Voraus. |
Re: Scrollen von Text per GDI sieht abgehakt aus ...
Moin Assarbad,
vielleicht hilft Dir dies hier ja weiter: ![]() Besonders sakuras Beitrag auf Seite 2. |
Re: Scrollen von Text per GDI sieht abgehakt aus ...
Zitat:
...:cat:... |
Re: Scrollen von Text per GDI sieht abgehakt aus ...
Moin sakura,
Zitat:
Zitat:
|
Re: Scrollen von Text per GDI sieht abgehakt aus ...
Hi ihr beiden und danke.
Leider nicht wirklich was ich brauche. Übrigens, durch den Timer ruckelt es stärker, als wenn du einen Thread nimmst, der an das Control eine Updatenachricht schickt. Das Ruckeln ist nach wie vor da. Für euch vielleicht marginal, aber ich habe da hohe Ansprüche ;) Außerdem hängt das Ruckeln an sich dann auch stark von der Pause ab. 15ms bei nem Timer ist der Killer für eine Anwendung. Da sollte man nen eigenen Thread periodisch was machen lassen. Bei 50 ms sieht auch die "Komponente" nicht mehr so doll aus :mrgreen: |
Re: Scrollen von Text per GDI sieht abgehakt aus ...
Hallo!
Da gibt's schon einige Möglichkeiten zur Optimierung eines solchen Problems. Aber vielleicht solltest Du erstmal verraten, wie Du bei Deiner momentanen Methode vorgehst. Generell kann man aber sagen, dass der Delphi-Standard-Timer für solche Sachen extrem unbrauchbar ist. Ein Thread oder zum Beispiel auch der Timer von DelphiX arbeiten um einiges genauer. Gruß, Denny |
Re: Scrollen von Text per GDI sieht abgehakt aus ...
Ich zitiere mich mal selber:
Zitat:
Wie gesagt in 1Pixel-Schritten und mit 33-50ms Intervall. Übrigens, DirectX käme insofern nicht in Frage, weiles auf Win95 nicht standardmäßig verfügbar ist, oder irre ich da? Ich will eigentlich das ganze Weichzeichnen und dann Scrollen ... vielleicht macht das ja was aus ... :-/ |
Re: Scrollen von Text per GDI sieht abgehakt aus ...
Liste der Anhänge anzeigen (Anzahl: 1)
Versuch mal ScrollWindow() oder ScrollDC(). Nur die letze Pixelzeile wird dann in den DC gezeichnet. Am besten holste diese Pixelzeile aus einer Bitmap. Du zeichnest also zuerst mal die Bitamp in voller Größe (falls sie nicht zu groß). Dann beim wm_Paint,wm_EraseBkGnd zeichnest du die Bitmap ins Fenster. Nichts anders also wie Doublebuffering. Nun wird mit ScrollWindow() gescrollt. Dieser Funktion übergibst du aber eine leere Region mit. Mit dieser Region rufst du dann InvalidateRgn() auf. Danach gleich UpdateWindow(), oder gleich RedrawWindow) mit Region.
Es sieht so aus das die neuen Grafikkarten direkte Bildschirmbereiche schneller verschieben können als eine Bitmap mit gleicher Größe zu zeichnen. ScrollWindow() gibt dir in der Region den Bereich des Fenster der neu gezeichnet werden muß. Meistens, bei 1 Pixel Scroll, ist das also nur eine Pixelzeile. Die Ausnahme ist es wenn das Window durch andere Windows teilweise verdeckt werden. Dann besteht bei 1 Pixel Scroll die Region aus 1x Pixelzeile unterer Rand + x mal oberer Rand für x Fenster die überlappen. In meiner Arbeit zu meinem ersten Tutorial für die DP habe ich auch diesen Weg beschritten, allerdings innerhalb eines Threads. Anbei eine kleine Demo. Einfach Liblings-CD oder MP3 einlegen, Mediaplayer beenden und Demo starten. Ganz exakt flüssig wird es aber nur wenn ein extrem gutes Timing benutzt wird und das Updating des Bildschirmbereiches mit dem Vertical Retrace Signal der Grafikkarte synchronisiert wird. DirectX bietet glaube ich diese Möglichkeit. Auch ScrollWindow()/ScrollDC() scheinen da sehr flüssig zu sein (kein geflackerer durch Retrace). Allerdings funkt immer wieder der Threadsheduler dazwischen. Ich bin aber auch auf jeden anderen Vorschlag gespannt der nur mit API auskommt :) Gruß Hagen PS: ich scroll ca. alle 10ms um 1 Pixel nach links. |
Re: Scrollen von Text per GDI sieht abgehakt aus ...
Zitat:
|
Re: Scrollen von Text per GDI sieht abgehakt aus ...
Ah je :(
Also, bis jetzt ist noch keine Mediensteuerung drinnen, man muß also selber irgendwas anschupsen. Ich scanne nur den Input vom WAVE_MAPPER. Wahrscheinlich musste erstmal in den Soundeinstellungen die Häckchen rausnehmen. Wenn du nun die Demo startest und im Lautsprecherpopup den Regler bewegst kommt ja ein Beep. Dieses solltest du dann als Welle+Frequnzspetrum sehen. Was hast du für ein System ? Wenn du eine CD einlegst meldet sich erstmal der Mediaplayer, den dann schließen. Danach von Hand am CD/DVD Player auf Play drücken. Zumindestens funktionierts bei mir. Schon "braunes dampfendes Häufchen" wenn das dann bei der Veröffentlichung des Tutorials passiert. By the Way, da du mich ja fragtest ein Tut zu schreiben. Ich habe vor 2 Tut's zu schreiben. Als erstes wird es was zur Fast Fourier Transformation und threadbasierte Echtzeitaufnahme und Anzeige dieser Daten. (Deswegen ärgert mich das schon wieder das man für jede Hardwarekonfiguration eigene Test's unter Windows machen muß). Das zweite Tut wird sich mit Neuronalen Netzen beschäftigen und direkt auf's FFT Tutorial aufsetzen. Möglich sind 3 Schwerpunkte. Entweder Spracherkennung (natürlich auf einfachste Weise), oder Erkennung vom MF Tones z.b. von einer Anrufbeantworter Fernbedienung, oder aber die Anwendung und das Training eines NN's als Ersatz der Fast Fourier Transformation (ob ich das hinkriege weiß ich aber noch nicht). Naja, ich hoffe es ist nicht zu schwere Kost für die Leser der DP ? Gruß Hagen PS: der zweite Eintrag im Menu muß auf Stop stehen. Falls nicht draufklicken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 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