Gibt es die Möglichkeit, den Hintergrund eines Views auf transparent zu setzen?
View-Hintergrund
-
-
Habe da jetzt auch gerade keine Idee. Die Hintergrundfarbe wird mit einem Quad_Color definiert, was meines Wissens keine Transparenz hat. Nehme mal an, dass Du die MSG_VIS_DRAW auch überschreibst.
-
In R-BASIC gibt es für die viewAttrs ein Attribut VA_SAME_COLOR_AS_PARENT_WIN, welches die Hintergrundfarbe auf die des Eltern-Objektes setzt. Das gibt es im SDK sicherlich ähnlich, ist aber nicht transparent. Vielleicht hilft dir das weiter.
-
Die Anwendung "Clock" im Ordner Zubehör zeigt in der analogen Darstellung einen Kreis. Der Bereich außerhalb ist transparent. Hier wird offenbar mit "Path" und "Region" gearbeitet. Aus dem Source-Code konnte ich bisher nicht entnehmen, wie das gemacht wurde.
Andere Beispiele habe ich noch nicht gesehen.
-
Die Anwendung "Clock" im Ordner Zubehör zeigt in der analogen Darstellung einen Kreis. Der Bereich außerhalb ist transparent. Hier wird offenbar mit "Path" und "Region" gearbeitet. Aus dem Source-Code konnte ich bisher nicht entnehmen, wie das gemacht wurde.
Auch mir ist da nicht gelungen.
Folgende Gedanken dazu: Ich glaube, ein transparentes Gen-Objket (wie ein View) ist eigentlich unmöglich, weil das Erste, was ein Gen-Objket zu machen schient, ist, den Bereichen, den es einnimmt, in der "Hintergrundfarbe" zu füllen. Das sieht man, wenn man die DosBox auf 100 bis 200 Zyklen runtertaktet. Eigentlich heißt: an der Stelle müsste man eingreifen - ob es dann geht, hängt davon ab, ob das darunterliegende Objekt mitspielt (es müsste sich vorher gezeichnet haben).
Eine Versuch wäre wert, die VIS_DRAW des View zu überschreiben: @callsuper nicht rufen, aber die Message an die Children (Scrollbalken) und das Content weiterleiten.
Eine Idee, die ich schon vor längerer Zeit hatte, war, im View den GEOS-Hintergrund zu zeichnen, so dass es Transparent aussieht
Rainer
-
Das was die Clock macht, ist etwas anders. Ein View stellt ja ein Fenster bereit. klassisch sind die rechteckig, müssen sie aber nicht sein. Wenn man das Window-Handle hat kann man dem Fenster auch eine andere Begrenzug geben. Ich denke die Funktion GrSetWinClipPath() könnte da ein Einstieg sein, obwohl das etwas überraschend auf eine GState aufbaut.
Transparente Fenster werden aktuell nicht unterstützt. Es gibt zwar für Fenster ein TRANSPARENT-Flag, das sorgt aber nur dafür der Fensterhintergund nicht gelöscht wird, also unverändert bleibt. Allerdings wird nicht sichergestellt, dass das was da vorhanden ist, tatsächlich dem Entspricht, was hinter dem aktuellen Fenster zu sehen sein müßte. Das wäre dann so, das sie schon einen Inhalt haben, wenn man über einen GState anfängt zu zeichnen. Das wäre gut, wenn man feingranular was darüberzeichnen will oder halbtransparent was zeichnen will. Aber wie gesagt, funktioniert das noch nicht, müßte man auch noch dran arbeiten.
Aber für viele Fälle ist schon Variante 1 brauchbar. -
Hm, scheint ja wirklich kompliziert zu sein.
Kennt ihr andere Anwendungen, die mit Path/Region arbeiten?
Jedenfalls danke für die analysierenden Gedanken