AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Clipping in FMX

Ein Thema von Kraisel · begonnen am 17. Jul 2014 · letzter Beitrag vom 21. Jul 2014
Antwort Antwort
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#1

Clipping in FMX

  Alt 17. Jul 2014, 16:42
Hallo,

wenn ich mit MFX in XE5 in einer Komponente (Descendant von TControl) in der Paint-Methode außerhalb des Canvas.RectF zeichne, wird offensichtlich zunächst nichts geclippt. Sowohl zur Design- als auch zur Runtime kann man also auf dem gesamten Canvas zeichnen.

Wenn ich dann aber zur Laufzeit an der Komponente Änderungen vornehme, wird alles auf Canvas.Rect geclippt, und alles außerhalb meiner Komponente wird NICHT mehr gezeichnet.

Wie kann ich FMX nun veranlassen, auch nach erstem Bildaufbau außerhalb von Canvas.RectF zu zeichnen?

Die Komponente einfach größer machen, geht zwar, ist aber nicht sinnvoll, da man dann bei Align-, Padding- und Margin-Einstellungen schnell an unüberwindbare Grenzen kommt.
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Clipping in FMX

  Alt 17. Jul 2014, 18:26
Ich verstehe vielleicht nicht so ganz die Frage (wie kann man zur Designzeit auf dem Canvas zeichnen?) und weiß auch nicht, warum Du außerhalb des Canvas der Komponente zeichnen willst (denn normalerweise zeichnet man doch nur im Bereich der Komponente, oder?), aber dennoch der Versuch einer Hilfestellung:

Mit "Canvas.IntersectClipRect (ARect)" kannst Du den Clipping-Bereich steuern (also festlegen, wo gezeichnet wird).

Ich gehe davon aus, dass Dir der Rest der Canvas-Verwendung (Canvas.beginscene, ggfls. Sichern und Wiederherstellen des Canvas, usw.) geläufig ist.
  Mit Zitat antworten Zitat
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#3

AW: Clipping in FMX

  Alt 17. Jul 2014, 22:05
Hallo Harry,

danke für die Antwort.

Ich habe in einigen Anzeigekomponenten (Leds, 7-Segment usw.) einen Glow-Effekt, der eben über die Komponente herauszeichnen muss, wenn sie z.B. aktiv oder selektiert ist. Dadurch kann man in technischen Einrichtungen wesentlich deutlicher machen, dass z.B. eine Led, ein Segment usw. AN, AUS oder SELECTED ist. Bei schlechten Lichtverhältnissen und/oder Sonneneinstrahlung in einer Maschinenhalle ist das auf dem Screen sonst oft nur durch Suchen erkennbar.

Jede Componente zeichnet sich zur Designzeit auf dem Canvas, selbst wenn es bei nichtvisuellen Komponenten nur das Icon ist.

Nein, ... mit IntersectClipRec wird nur noch die gemeinsame überlappende Fläche mit dem Control.Canvas.BoundsRect gezeichnet. Ich will aber quasi auf z.B. (-30, -30, TControl.Width + 30, TControl.Height + 30) zeichnen.

Vor allem kapiere ich nicht, wieso alles beim ersten zeichnen OK ist, und erst beim Repaint auf BoundsRect geclippt wird, obwohl die PaintMethode identisch ist. Das bedeutet ja, dass FMX beim ersten zeichnen den gesamten Canvas freigibt (eben NICHT clippt) und beim Repaint NUR noch mein Control. Wieso???
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Clipping in FMX

  Alt 17. Jul 2014, 22:13
Ach so, das hätte ich mir ja eigentlich denken können, Du entwickelst gerade selber eine eigene Komponente. In dem Bereich bin ich leider nicht so firm, aber vielleicht kann man ja was erkennen, wenn Du mal den konkreten Source-Code postest, mit dem Du die Zeichenausgabe machst.
  Mit Zitat antworten Zitat
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#5

AW: Clipping in FMX

  Alt 17. Jul 2014, 23:10
Natürlich kann man auch mit den Effect-Komponenten (hier dann TGlowEffect) arbeiten, aber ich würde trotzdem gerne den Zusammenhang des Clippings wie oben beschrieben, verstehen.
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Clipping in FMX

  Alt 18. Jul 2014, 12:41
Nur mal so grundsätzlich:

Du hast keinen Einfluss, wann Deine Komponente und das Umfeld gezeichnet wird. Selbst wenn es mit Deinem aktuellen FMX funktionieren würde, könnte es bei der nächsten Version Probleme geben.

Daher solltest Du Dich an das Effect-Prinzip halten und Dich darauf verlassen, dass FMX das dann ordentlich zeichnet.

Ansonsten würde mir nur einfallen, das Control nach außen um einen transparenten Bereich zu vergrößern und auf diesen ggf. einen Verlauf zu zeichnen. Das würde aber das Handling erschweren, da die Controls immer größer wären als man eigentlich denkt.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#7

AW: Clipping in FMX

  Alt 18. Jul 2014, 14:53
Natürlich habe ich keinen Einfluss darauf, wann gezeichnet wird, aber wenn gezeichnet wird, soll natürlich das gezeichnnet werden, was ich will. Und diese Mechanismen bleiben hoffentlich in FMX gleich.

Die Komponente größer machen funktioniert ganz gut, aber nur, solange man kein Align, Padding und Margin einsetzt.

Es bleiben einfach die Fragen:

1: Wieso NUR beim erten Zeichnen NICHT geclippt wird und der gesamte Canvas verändert werden kann, und beim späteren Neuzeichnen mit Repaint alles mit Controlabmessungen geclippt wird.

2: Kann ich den Clipbereich ohne Nebenwirkungen VERGRÖßERN? (Verkleinern ist mit IntersectClipRect kein Problem). Schließlich macht TGlowEffect es ja auch, aber ich habe den Faden beim Verstehen des Emba-Codes verlohren.

Dann wäre das Bonbon gelutscht.

Vielen Dank für jeden Hinweis.
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Clipping in FMX

  Alt 18. Jul 2014, 15:23
Deine Komponente kann sich m.E. nur innerhalb ihres erlaubten Bereiches zeichnen.

Wenn sie irgendwas "um sich herum" verändert, kann das FMX u.U. halt wieder überschreiben. Ich bin da nicht ganz sattelfest, aber es würde mich wundern, wenn Du da eine funktionierende Lösung finden würdest.

Ein Effect ist quasi ein Control, das über Deinem Control liegt (es also überdeckt und von einem evtl. Align nicht tangiert würde) und einfach (nachdem Dein Control und sein Umfeld gemalt wurde) einen Effekt auf den Canvas malt. FMX muss darüber aber bescheid wissen und diesen Effekt in die CanvasZeichnen-Funktionalität einbeziehen.

So muss der Effekt geändert werden, wenn sich etwas am Control ändert und anders herum. FMX hat daher (zumindest soweit ich das unter XE3 nachvollziehen konnte) regelrechte rekursive Zeichnen-Orgien durchgeführt. Wenn Du da zwischendurch etwas auf den Canvas mogelst, kann das u.U. schnell wieder überschrieben werden (und in unterschiedlichen FMX-Versionen ggf. auch unterschiedlich).

M.E. kannst Du Dich nur dem Effekt-Konzept unterordnen wenn Du sicher gehen willst, dass das funktioniert.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#9

AW: Clipping in FMX

  Alt 21. Jul 2014, 01:03
Zunächst vielen Dank.

Sollte ich etwas ohne TEffect finden, werde ich mich hier noch einmal melden und es mitteilen. Die kommende Woche ist aber komplett mit anderen Aufgaben verplant. Somit wird es etwas dauern.
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:11 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