2017-09-28 3 views
0

Ein TCanvasGPU wird für mobile Plattformen auf FireMonkey verwendet. Leider, wie jemand entdeckt: FMX on iOS: how to perform partial invalidation?, unterstützt diese Leinwand nicht cliprects und Canvas.InvalidateRect (TRectF) immer die gesamte Leinwand ungültig.Wie kann ich verhindern, dass FireMonkey TPaintBox den Hintergrund löscht?

Dies wäre nicht so schlimm, außer dass der Canvas-Hintergrund immer vor einem OnPaint-Ereignis gelöscht wird. Das bedeutet, dass jeder Versuch, nur ein Rechteck in einem OnPaint zu aktualisieren, zum Scheitern verurteilt ist, da der gesamte Bereich zuerst gelöscht wird. So erfordert selbst das kleinste Update, dass die gesamte Leinwand gezeichnet wird.

Weiß jemand, ob es möglich ist zu stoppen ein Steuerelement (speziell TPaintBox) Hintergrund in FireMonkey gelöscht? Früher war es in VCL möglich, ControlStyle: = ControlStyle + [csOpaque] zu setzen.

Ich fand TCustomForm.PaintBackground in FMX.Forms, machte eine lokale Kopie und kommentierte den Aufruf dazu in TCustomForm.PaintRects, dachte, es würde Steuerelemente gelöscht werden, aber die TPaintBox Canvas wurde immer noch irgendwie gelöscht.

Antwort

0

Um meine eigene Frage zu beantworten ...

TForm ist standardmäßig gestylt eine TRectangle als erste Komponente enthalten, und dies wird mit hellgrau in jeder Farbe Veranstaltung gefüllt.

Wenn Sie das auskommentieren, füllen Sie FMX.Objects.TRectangle.Paint aus. Unter Windows speichert TPaintBox Canvas das Image bei jedem Invalidate.

Leider auf Android, der Bildschirm jetzt nur zu schwarz statt hellgrau gelöscht. Es scheint also, dass das TCanvasGPU-Image zwischen den Paint-Ereignissen auf dem Handy nicht beibehalten wird, weshalb Clipfrequenzen wahrscheinlich nicht unterstützt werden.

Verwandte Themen