Transparenzfehler (Windows)

Hallo in die Runde.
Ich habe von zwei Anwendern die Nachricht bekommen, dass die Ausgabe meines Programms fehlerhaft sei. Bei mir (macOS) konnte ich das nicht nachvollziehen, unter Windows sieht man jedoch, dass weie Flchen, die transparent sein sollen, genau das nicht sind.

Hier mal ein Beispielausschnitt:

Der fr die Ausgabe genutzte Code:

[code] if LastObject<>nil then

LastObject.Transparent=1

localGraphics.drawpicture LastObject, xFaktor, yFaktor,wFaktor,hFaktor,0,0,LastObject.Width,LastObject.Height

end[/code]

Hat jemand eine Idee, woaran es liegt?
Gibt es Probleme mit Transparenzen unter Windows?
Wie umgehe ich die?
Ich nutze noch Xojo 2019r1, liegt es daran?

Gru, Stefan Mettenbrink.

Ich habe fest gestellt das z.B. zwei übereinander liegende Elemente das untere ein Parent von dem drüber sein muss.
Im Designer wird das Parent als rotes Rechteck angezeigt. Oder in der Toolbar ist ein Knopf welcher alles als Baumansicht darstellt.
Hätte ich nie erwartet, ist aber so in Xojo, obwohl Transparent eingeschaltet ist hat man sonst einen farbigen Block als Hintergrund,
jedenfalls bei WIndows 10.
Und diese Transparent Option beim Steuerelement kann sehr viele Paint Ereignisse auslösen.
Ich nutze 2019r3.1

Sowas würde ich als Picture zusammenbauen und dann in einem Canvas zeichnen.
Alles andere schreit nach Ärger.

OK, etwas mehr Code.

Ich erzeuge ein Picture:

LastObject=MyNewPicture(w*Faktor,h*Faktor,32)
 if LastObject<>nil then
   LastObject.Transparent=1
   if DrawMaskOn then
     LocalGraphics=LastObject.Mask.Graphics
   else
     LocalGraphics=LastObject.Graphics
   end
 end

Darin wird dann diverses ausgegeben (Text, Bilder, etc.).
Dieses Picture (LastObject) wird dann an der gewünschten Stelle in ein größeres Picture eingefügt:

if LastObject<>nil then

   LastObject.Transparent=1

   localGraphics.drawpicture LastObject, x*Faktor, y*Faktor,w*Faktor,h*Faktor,0,0,LastObject.Width,LastObject.Height
   
end

Übergeordnet gibt es ein Propertie (Picture) in einem ContainerControl. Dies derzeit Transparenz, alle erzeugten Pictures werden in dieses Picture eingezeichnet.

Auch wenn ich bei dem Grundbild die Transparenz auf 1 setze werden die darauf gezeichneten Bilder nicht transparent ausgegeben.

@Markus Rauch:
Was Du dazu erklärt hast, habe ich nicht verstanden. Wäre schön, wenn Du das noch mal genauer erklären würdest.

also in dem ersten Beispiel ist das Kreis Element außen und dem Fenster zugeordnet und darum sieht man da graue Ecken mit Fenster Farbe zur Laufzeit.

Beim zweiten Beispiel ist das Kreis Element innen im Rechteck zugeordnet und das sieht dann zur Laufzeit richtig aus.

Vielleicht könnte das dein Problem sein.

Danke für die Erklärung.
Meine Ausgabe ist aber immer in einem Picture.
Ich lege ein Grund-Picture in Seitengröße und gewünschter Auflösung an. Dort wird ein Hintergrundbild (nahezu vollflächig) ausgegeben. Dann werden diverse kleine Picture mit vorgegebenem Text gefüllt und auf dem Grund-Picture (ggf. gedreht) ausgegeben. Die Ausgabe der kleinen Bilder auf dem Hintergrundbild ist dann nicht transparent, obwohl die kleinen Bilder diese Eigenschaft haben.
Unter macOS funktioniert das wie gewünscht.

Hat noch jemand eine Idee?

Gruß, Stefan Mettenbrink.

Hat das vielleicht was mit HI-DPI zu tun?
Diese mini Bilder sind alle im gleichem Typ inhaltlich gespeichert?
Ansonsten mal ein Beispiel Projekt wo nur dieses UI Element erstellt wird in die Cloud tun und teilen.

Nein, mit HDPI kann es nicht zu tun haben. Ich nutze dafür keine GUI-Elemente. Alles spielt sich im Code ab. Es werden nur Variablen (Picture) genutzt. Zum Schluss wird dann auf ausgegeben (Im Canvas, auf dem Drucker oder als Datei). Ich allen Fällen fehlt unter Windows die Transparenz, wo sie bei macOS vorhanden ist.

Gruß, Stefan Mettenbrink.

Also die Bilder werden im Code gemalt und sind nicht im Projekt hinterlegt?
An HDPI dachte ich weil man Bilder in verschiedenen Detail Stufen hinterlegen kann und gerade Apple Retina Auflösung hat.

Richtig, alles wird im Code erzeugt. Lediglich manche Hintergrundbilder werden aus Dateien (jpg) geladen und in das Picture eingefügt.

Wenn man in Windows einen Haltepunkt setzt hat das Bild einen Alpha Kanal?
Picture.HasAlphaChannel
Zumindest wenn man es mit Color.Clear füllt sollte es Transparent sein,
Was ich ein bischen komisch finde das nur die Felder wo der Text vertikal ist im Screenshot dieses Problem haben.

Muss ich prüfen. Ich weiß noch nicht, wann ich dazu komme.
Dass nur manche Felder das Problem haben liegt vermutlich an den eingefügten Textfeldern. Die sind manchmal klein genug, dass sie in die weißen Flächen passen.

Hallo Stefan,

zeichnest Du die Textblöcke mit dem weißen Hintergrund alle selbst?

Ja. Die werden aus den Anwenderdaten generiert.
Ist das ein Problem?

Dann erzeuge die Bilder für die Texte doch gleich transparent, indem Du die Bittiefe weg lässt:

LastObject = MyNewPicture (w*Faktor, h*Faktor)

So brauchst Du kein Weiß im Hintergrund (und auch die Transparent-Einstellung nicht) und kannst sie problemlos auf einen anderen Hintergrund malen.

Das geht nicht. Es sind keine reinen Textfelder. Der Anwender kann hier auch Bilder einfügen und die Texte können farbig sein oder (farbige) Grafikelemente enthalten.

Und wo ist das Problem dabei?

Wenn ich problemlos die Bittiefe weglassen kann habe ich keines. War mir bislang nur nie in den Sinn gekommen.

Auf jeden Fall haben die Bilder so keinen Hintergrund, der etwas verdecken könnte. Und Du kannst Dir die ganze Maskiererei sparen.

Der Hinweis hat geholfen. Ohne Angabe der Bittiefe wird transparent ausgegeben. Bisher habe ich noch nichts nachteiliges entdeckt.
Danke!