AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Scrollen von Text per GDI sieht abgehakt aus ...
Thema durchsuchen
Ansicht
Themen-Optionen

Scrollen von Text per GDI sieht abgehakt aus ...

Ein Thema von Assarbad · begonnen am 1. Aug 2003 · letzter Beitrag vom 4. Aug 2003
Antwort Antwort
Seite 1 von 2  1 2      
Assarbad
(Gast)

n/a Beiträge
 
#1

Scrollen von Text per GDI sieht abgehakt aus ...

  Alt 1. Aug 2003, 22:25
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 EDA Preview und dort die About-Box anschauen (Klick auf den ganz breiten Button ganz unten im Dialog).

Danke im Voraus.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Scrollen von Text per GDI sieht abgehakt aus ...

  Alt 1. Aug 2003, 23:01
Moin Assarbad,

vielleicht hilft Dir dies hier ja weiter:

Ticker-Text

Besonders sakuras Beitrag auf Seite 2.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: Scrollen von Text per GDI sieht abgehakt aus ...

  Alt 1. Aug 2003, 23:26
Zitat von Christian Seehase:
Besonders sakuras Beitrag auf Seite 2.
Woran Du Dich noch erinnerst Ist allerdings VCL, vielleicht hilft es trotzdem.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Scrollen von Text per GDI sieht abgehakt aus ...

  Alt 1. Aug 2003, 23:46
Moin sakura,

Zitat von sakura:
Woran Du Dich noch erinnerst
Danke

Zitat von sakura:
Ist allerdings VCL, vielleicht hilft es trotzdem
Die entscheidende Stelle (die Paint Methode) dürfte sich allerdings verhältnismässig leicht auf nonVCL umbauen lassen. (hoffentlich )
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#5

Re: Scrollen von Text per GDI sieht abgehakt aus ...

  Alt 2. Aug 2003, 01:10
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
  Mit Zitat antworten Zitat
DennyC

Registriert seit: 27. Jan 2003
Ort: Berlin
47 Beiträge
 
Delphi 7 Professional
 
#6

Re: Scrollen von Text per GDI sieht abgehakt aus ...

  Alt 3. Aug 2003, 02:05
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
Mein Leben in HTML
http://www.devblog.de > Delphi Blog
http://www.evius.de > Job
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#7

Re: Scrollen von Text per GDI sieht abgehakt aus ...

  Alt 3. Aug 2003, 03:21
Ich zitiere mich mal selber:
Zitat:
Da sollte man nen eigenen Thread periodisch was machen lassen
Wie du siehst, sehe ich den Thread auch als bessere Alternative. Ändert aber nix am Grundproblem. Derzeit zeichne ich alles in einen MemDC und kopier es per BitBlt auf den DC meines Controls.

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 ... :-/
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: Scrollen von Text per GDI sieht abgehakt aus ...

  Alt 3. Aug 2003, 03:38
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.
Angehängte Dateien
Dateityp: exe project1_194.exe (150,5 KB, 55x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Scrollen von Text per GDI sieht abgehakt aus ...

  Alt 3. Aug 2003, 04:18
Zitat von negaH:
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.
Gesagt, getan, nichts passiert. Außer dass die fps etwas geflackert haben, ganz links (zwei drei Pixel breit) sich die blaue Linie etwas bewegt hat und unten die grüne Linie von rechts nach links durchgelaufen ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Scrollen von Text per GDI sieht abgehakt aus ...

  Alt 3. Aug 2003, 04:40
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz