Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Transparenz wie bei Vista (https://www.delphipraxis.net/75270-transparenz-wie-bei-vista.html)

3_of_8 24. Aug 2006 00:18

Re: Transparenz wie bei Vista
 
Liest du die Antworten eigentlich?

Zitat:

Zitat von Khabarakh
Beim Standard-Miranda? Das ist doch ein vollkomemn anderer Effekt, bei dem einfach das gesamte Fenster mit einem konstanten Wert gelbendet wird.

Da wird einfach das AlphaBlending der Form benutzt (OH hilft weiter).

Ansonsten kann ich eigentlich auch prima VCL Komponenten mit LayeredWindows benutzen.

Daniel G 24. Aug 2006 00:34

Re: Transparenz wie bei Vista
 
Zitat:

Zitat von 3_of_8
Liest du die Antworten eigentlich?

Verstehst du die Frage eigentlich? Guck dir das Beispiel an, das LH_Freak dort gepostet hat. Das ist mit Miranda definitiv möglich und dort wird garantiert nicht "einfach das Alphablending der Form benutzt".

3_of_8 24. Aug 2006 00:40

Re: Transparenz wie bei Vista
 
http://addons.miranda-im.org/files/s...45-preview.png

Diesen Screenshot hat er gepostet.

Und wenn das kein AlphaBlending ist, dann dann gebe ich dir einen an der DP-Bar aus. :mrgreen:

Daniel G 24. Aug 2006 00:44

Re: Transparenz wie bei Vista
 
Und wie erklärst du dir, dass der Text normal lesbar ist? Wenn ich eine komplette Form via AlphaBlend transparent mache, ist das nämlich nicht mehr der Fall...

alias5000 24. Aug 2006 01:00

Re: Transparenz wie bei Vista
 
Bzw. ist wäre auch der weiße Hintergrund transparent, das ist er aber überhaupt nicht.
Also, wo ist die DP-Bar? :mrgreen:

On-Topic: ist es möglich, bestimmte Zonen vom AlphaBlending auszunehmen? Dann könnte man das so rum machen

JasonDX 24. Aug 2006 01:21

Re: Transparenz wie bei Vista
 
Zitat:

Zitat von alias5000
On-Topic: ist es möglich, bestimmte Zonen vom AlphaBlending auszunehmen? Dann könnte man das so rum machen

Nein, zumindest interpretiere ich das aus dem MSDN so:
Dort steht
Layered Windows
Using a layered window can significantly improve performance and visual effects for a window that has a complex shape, animates its shape, or wishes to use alpha blending effects. [...] layered windows can be partially translucent, that is, alpha-blended.

To create a layered window, specify the WS_EX_LAYERED extended window style when calling the CreateWindowEx function, or call the SetWindowLong function to set WS_EX_LAYERED after the window has been created. After the CreateWindowEx call, the layered window will not become visible until the SetLayeredWindowAttributes or UpdateLayeredWindow function has been called for this window. Note that WS_EX_LAYERED cannot be used for child windows.
Und iirc ist jede Komponente auf dem Formular auch als "Child Window" zu betrachten.
Sprich: in #5 duerfte der letzte Absatz als Unfug bezeichnet werden :stupid:

Wie es schlussendlich funktioniert, weiss ich nicht. Aber ich hab das Gefuehl, dass das nach einem AlphaChannel riecht. *g*
Zumindest keonnte man so bestimmten Bereichen eine gewisse Transparenz zuschreiben, und anderen wieder nicht. (bspw. ist die aeusserste Pixelreihe des Rahmens wieder nicht transparent...) Wie das genau funktioniert, das weiss ich nicht, waere aber auf ein Ergebnis gespannt ;)

greetz
Mike

3_of_8 24. Aug 2006 01:32

Re: Transparenz wie bei Vista
 
Na gut, ihr habt Recht. Ich hätte schwören können, dass das früher nicht so war, ich verwechsle wohl irgendwie immer Transparent und AlphaBlend und so weiter.

@alias: Die DP Bar ist natürlich auf der USS Delphi-PRAXiS. Aber du kriegst nix, nur Daniel G hab ich nen Drink versprochen. :mrgreen:

@Jason: Man könnte auf die Form zeichnen, was eigentlich hinter der Form sein sollte, allerdings nicht komplett das, was dahinter sein sollte, sondern einen Mischwert aus Farbe hinter der Form und Farbe auf der Form.

Also in etwa so:

Delphi-Quellcode:
Repaint;
for I:=0 to topborder-1 do
  for J:=0 to width-1 do
    canvas.pixels[i, j]:=canvas.pixels[i, j] or bgcolor;
for I:=height-bottomborder-1 to height-1 do
  for J:=0 to width-1 do
    canvas.pixels[i, j]:=canvas.pixels[i, j] or bgcolor;
for topborder to height-bottomborder-1 do
  for J:=0 to leftborder-1 do
    canvas.pixels[i, j]:=canvas.pixels[i, j] or bgcolor;
for topborder to height-bottomborder-1 do
  for J:=width-rightborder to width-1 do
    canvas.pixels[i, j]:=canvas.pixels[i, j] or bgcolor;
Das ganze ist jetzt nur mal so schnell dahingetippt, ich erhebe keinen Anspruch darauf, dass das funktioniert. Aber aus dem Prinzip könnte man was machen.

JasonDX 24. Aug 2006 01:41

Re: Transparenz wie bei Vista
 
Zitat:

Zitat von 3_of_8
Na gut, ihr habt Recht. Ich hätte schwören können, dass das früher nicht so war, ich verwechsle wohl irgendwie immer Transparent und AlphaBlend und so weiter.

Afaik wird Transparent auch nur ueber Layered Windows erledigt, sollte theoretisch also auch dort nicht klappen.

Zitat:

Zitat von 3_of_8
@Jason: Man könnte auf die Form zeichnen, was eigentlich hinter der Form sein sollte, allerdings nicht komplett das, was dahinter sein sollte, sondern einen Mischwert aus Farbe hinter der Form und Farbe auf der Form.

[...]
Delphi-Quellcode:
for I:=height-bottomborder-1 to height-1 do
  for J:=0 to width-1 do
    canvas.pixels[i, j]:=canvas.pixels[i, j] or bgcolor;
Aber aus dem Prinzip könnte man was machen.

Jo, eine GDI-Basierte CPU-Bremse :stupid: Alleine schon die Zuweisung von Pixels[...] in zwei verschachtelten Schleifen bremst die Applikation so aus, dass Vista da schneller installiert als das Formular neu gezeichnet ist :mrgreen: Wobei natuerlich auch wieder das lesen der Farbe des Pixels dahinter seinen (Zeit)Aufwand mit sich bringt ;)
Kurz: Das ist IMO der falsche Weg.

greetz
Mike

LH_Freak 24. Aug 2006 11:04

Re: Transparenz wie bei Vista
 
naja, meine lösung die ich hatte lief ohne Canvas.Pixels. Eigentlich war die Methode auch nicht so langsam :? aber es gab halt das Problem mit dem Verschieben der Form etc.

Khabarakh 24. Aug 2006 11:27

Re: Transparenz wie bei Vista
 
Ganz sicher, dass das in Miranda Standard-Controls sind ;) ?
Vielleicht lassen sich auch die VCL-Controls nutzen, indem sie bei jedem WM_PAINT auf das Bitmap gemalt werden (natürlich mit A = 255 ;) ) und danach wieder UpdateLayeredWindow aufgerufen wird.
Einfacher wäre es allerdings, auf Avalon zu warten :mrgreen: .


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz