Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#1

GlassFrame: Unerwünschtes Blending, ich will opak

  Alt 30. Nov 2011, 15:21
Tach zam!

Nachdem ich nach elendigem Suchen endlich heraus gefunden habe, warum mein D2007 unter Win7 kein Glassframe anzeigen wollte (in der DwmApi.pas wurde nach MajorWinVersion >= 6 geprüft, >= 5 war wohl treffender, denn das ist der Wert den mein Win7 dort hinterlässt ), verzweifel ich ein wenig am Verhalten der Glass-Areas.

Nachvollziehbar ist noch, dass lediglich TWinControl Nachfahren vernünftig in einem Glass Bereich gezeichnet werden. (Siehe Edit) Alles, was den Formular-Canvas mit benutzt, führt zum additiven Mischen mit dem, was grad durch's Formular schimmert. Damit kann ich (mehr oder minder) noch leben. Problematisch ist aber, dass wenn ich z.B. ein Panel (um einen undurchsichtigen Bereich auf dem Glas zu machen) nehme, dass zwar der Panelhintergrund brav opak ist, aber alle weiteren nicht-WinControls - trotz dieses Panels als Parent - wieder das additive Verhalten zeigen.
Dadurch wird z.B. ein TLabel mit schwarzem Text auf dem Panel komplett durchsichtig, und schneidet quasi ein Loch in Textform in das Panel. Noch schlimmer ist dies bei den ganz normalen TButtons: Auch dort wird zwar der Button an sich zwar richtig gezeichnet, jedoch der Text darauf ist wieder durchsichtig. Um es perfekt zu machen: Lege ich einen TButton auf das TPanel, wird auf ein Mal der ganze Button additiv und nicht opak gezeichnet, ganz wie non-WinControls direkt auf dem Formular im Glass Bereich. Wah!

Gibt es irgend einen Kniff, "vernünftig" Dinge in die Glass-Area zu zeichnen, ohne dass ich dafür weitere Fremdkompos oder Libs einsetzen muss (meine Co-Devs steinigen mich sonst bald), und fix geht? Da es letztlich nicht Lebensnotwendig ist, muss ich sonst darauf verzichten. Aber hübsch wäre es!

Dankschö schon mal!

\\Edit: Oh, ein normales TPanel wird auch additiv gezeichnet, es war nur das TAdvSmoothPanel (TMS) so nett. Bildchen angefügt! (Beide Panels sind clRed. Nett aber, dass das SmoothPanel den Verlauf nach Transparent schafft!)
Miniaturansicht angehängter Grafiken
glass.png  
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (30. Nov 2011 um 15:32 Uhr)
  Mit Zitat antworten Zitat