Autor |
Beitrag |
Mathematiker
      
Beiträge: 2622
Erhaltene Danke: 1448
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Fr 26.07.13 21:47
Hallo,
ich habe seit einiger Zeit versucht mein Astroprogramm www.entwickler-ecke....ewtopic.php?t=110678 mit einem XP-Manifest zu verbinden (windowsxp.res einbinden), da es ja dann etwas schöner aussieht.
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
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
_________________ We are, we were and will not be.
|
|
Mathematiker 
      
Beiträge: 2622
Erhaltene Danke: 1448
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: 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.
Meine Anfrage in der EE war wohl zu früh, ich hätte noch etwas experimentieren und nachdenken sollen.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 27.07.13 22:07
|
|
Mathematiker 
      
Beiträge: 2622
Erhaltene Danke: 1448
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: 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
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
|