Entwickler-Ecke
Sonstiges (Delphi) - XP-Manifest und Ausführungsgeschwindigkeit
Mathematiker - Fr 26.07.13 21:47
Titel: XP-Manifest und Ausführungsgeschwindigkeit
Hallo,
ich habe seit einiger Zeit versucht mein Astroprogramm
http://www.entwickler-ecke.de/viewtopic.php?t=110678 mit einem XP-Manifest zu verbinden (windowsxp.res einbinden), da es ja dann etwas schöner aussieht. :D
Mit einer kleinen Unschönheit (die Schalter in der Toolbar sind nach oben verschoben) funktioniert es, nur tritt der Effekt auf, dass die Animation des Sternhimmels dann nicht mehr flüssig abläuft, sondern scheinbar nur jedes zweite Bild angezeigt wird, d.h. es "ruckelt". Ich habe (fast) alles probiert, ohne Ergebnis. Auch wenn ich alle anderen sichtbaren Komponenten ausblende und nur noch das Bitmap in die Paintbox kopiert wird, ändert es sich nicht. Es "ruckelt".
Kann es sein, dass der XP-Style die Ausführungsgeschwindigkeit des Programms so stark abbremst? Ohne XP-Style ist alles vollkommen in Ordnung. Außerdem dürfte mein Rechner eigentlich keine Probleme haben, eine zügige Animation darzustellen.
Vielleicht stelle ich mich auch wieder nur blöd an.
Beste Grüße
Mathematiker
jaenicke - Sa 27.07.13 09:34
Ohne Quelltext kann ich da nicht viel testen. Aufgefallen ist mir das jedenfalls in eigenen Programmen nicht.
Kannst du vielleicht mal schauen, ob du das in einem kleinen Beispielprojekt auch hast und das dann anhängen?
Gausi - Sa 27.07.13 13:00
Wenn ich sowas beobachte, dann spiele ich immer etwas am DoubleBuffered der einzelnen Komponenten rum. Meistens geht das davon dann weg.
Mathematiker - Sa 27.07.13 20:03
Hallo,
Gausi hat folgendes geschrieben : |
Wenn ich sowas beobachte, dann spiele ich immer etwas am DoubleBuffered der einzelnen Komponenten rum. |
Danke für den Hinweis. DoubleBuffered mag ich nicht so richtig und benutze es deshalb auch sehr selten. Hier hatte ich es auch nicht.
Ich habe als Test in meinem Hauptprogramm 9000 Textseiten inkl. 9000 Abbildungen so schnell wie möglich hintereinander anzeigen lassen, mit XP-Style und ohne. Nach mehreren Testläufen ergab sich, dass mit XP-Style knapp 3 % mehr Zeit benötigt wird. Das ist nicht viel, also ohne Bedeutung, vielleicht auch nur ein Messfehler.
Dann habe ich mir nochmals das Astroprogramm vorgenommen und das kurze Timer-Intervall vom 10 ms auf 20 ms erhöht. Im Ergebnis läuft das Programm mit beiden Stilen gleichschnell und nur unwesentlich langsamer als vorher. Es wird wohl am zu kurzen Timer gelegen haben.
Verschärfend kam wohl noch hinzu, dass nach meinem "Urlaub vom Internet" der Rechner im Hintergrund "Millionen" von Updates holte. :wink:
Meine Anfrage in der EE war wohl zu früh, ich hätte noch etwas experimentieren und nachdenken sollen. :autsch:
Beste Grüße
Mathematiker
jaenicke - Sa 27.07.13 22:07
Mathematiker hat folgendes geschrieben : |
DoubleBuffered mag ich nicht so richtig und benutze es deshalb auch sehr selten. |
Das führt oft zu einem Flackern, wenn man es nicht nutzt.
Mathematiker hat folgendes geschrieben : |
Dann habe ich mir nochmals das Astroprogramm vorgenommen und das kurze Timer-Intervall vom 10 ms auf 20 ms erhöht. |
Ein Timer ist für eine solche Darstellung nicht unbedingt das Sinnvollste, aber dass es bei der Anzahl an Neuzeichen-Operationen mit komplettem Löschen (wegen fehlendem DoubleBuffered) flackert, ist logisch.
Mathematiker - Sa 27.07.13 22:23
Hallo,
jaenicke hat folgendes geschrieben : |
Ein Timer ist für eine solche Darstellung nicht unbedingt das Sinnvollste, aber dass es bei der Anzahl an Neuzeichen-Operationen mit komplettem Löschen (wegen fehlendem DoubleBuffered) flackert, ist logisch. |
Eigentlich nicht, da ich ja nicht direkt zeichne, sondern mit einem Bitmap. Die Paint-Methode rufe ich im Timer auf.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure Tfhimmel.Paintbox1Paint(Sender: TObject); var bitmap:tbitmap; myrect,birect:trect; begin bitmap:=tbitmap.create; bitmap.width:=paintbox1.width; bitmap.height:=paintbox1.height; birect:=paintbox1.ClientRect; myrect:=birect; malen(bitmap.canvas, sender); paintbox1.canvas.copyrect(birect,bitmap.canvas,myrect); bitmap.free; end; |
Ein globales Bitmap habe ich auch versucht, brachte aber nichts, da die Berechnung und Darstellung der zeitintensive Teil sind. Immerhin müssen von 1800 Sternen die Äquatorkoordinaten auf Beobachtungsort und -zeit umgerechnet und auf die Ebene projiziert werden. Dazu sind noch die Orte von Sonne, Mond und Planeten immer wieder zu aktualisieren usw... Das kostet Zeit und offenbar mehr als 10 ms auf meinem Computer.
DoubleBuffered nehme ich eigentlich nur bei TImage und selten bei TListbox. Ansonsten kopiere ich immer im Speicher vorbereitete Bitmaps.
Beste Grüße
Mathematiker
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!