Autor Beitrag
ripmav
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 28.06.09 11:04 
Hallo,
auf meinem Formular befinden sich 23 Labels auf 23 Panels.
BackgroundImage der Form ist ein PNG und jedes Panel hat ein halbtransparentes PNG als BackgroundImage.

Man kann nun (auch als Release kompiliert und außerhalb der IDE gestartet) sehen, wie sich alles langsam aufbaut.

Ich habe schon alles mögliche probiert:
- DoubleBuffered = true: keine Veränderung
- BackgroundImageLayout = None (Panels und Form): schnellerer Aufbau, aber immer noch viel zu langsam
- In der OnPaint der Form die Bilder mit e.Graphics.DrawImage(Unscaled) gezeichnet: noch langsamer als mit Panels

In Visual Basic 6 funktioniert das ohne Probleme. Man merkt keinen Aufbau der Elemente!

Die einzige Möglichkeit, die mir noch einfällt, wäre, im Speicher ein Bild anzulegen, worauf dann alles gezeichnet wird. Danach wird es der Form als BackgroundImage zugewiesen. Aber wenn ich es so machen würde, würden sich sehr viele neue Probleme ergeben. Das kann ja nicht Sinn der Sache sein.

Kann ich den Vorgang irgendwie beschleunigen? Vielleicht durch direkte Aufrufe der Win32 Drawing APIs?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 28.06.09 11:40 
Naja, so viele Bilder und visuelle Komponenten sind eben mehr als suboptimal...

Eigentlich hört sich das nach einem typischen Problem für das Zeichnen auf ein Bild an. Denn auch die Labels braucht man dann ja nicht, weil man den Text zusammen mit den Bildern direkt ausgeben kann.
ripmav Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Do 02.07.09 07:25 
So, ich zeichne jetzt alles im Paint Ereignis der Form.

Ursprünglich habe ich mit DrawImageUnscaled(...) gearbeitet, aber auch das war zu langsam.
Dann habe ich in einem Forum gelesen, per FillRectangle(...) und einem TextureBrush ginge es am schnellsten: Jetzt ist die Geschwindigkeit einigermaßen OK.
Allerdings ist die VB6 Anwendung immer noch sehr viel schneller..

Gibt es eine Möglichkeit, im Paint Ereignis noch schneller als mit FillRectangle(...) und einem TextureBrush Bilder zu zeichnen? Zum Bsp. mit unsafe code?

Edit: Bringt evtl. CachedBitmap hier etwas?