Przezroczysta forma z PNG

0

Cześć. Szukałem szukałem i nie wyszukałem, a mianowicie mam forme na której jest obrazem PNG + efekty Alpha Channel. Chce zrobić przezroczystą formę na której będzie ten obrazek wraz z cieniami itp. Jedyne rozwiązanie jakie na razie znalazłem to Brush.Style := bsClear, które działa znakomicie, <ort>do pÓÓÓÓki </ort>jakieś okno nie najedize mi na formę :/ Czy ktoś zna jakiś sposób na to lub komponent? Dodam, że nie chodzi mi o bitmapy i zabawę z regionami bo to ma być jeden obrazek PNG, który ma już swoje efekty (cień, przezroczystość). Z góry dzięki i pozdro ;)

0

Sprowadź sobie plik PNG do 32bitowej bitmapy, a potem zamień swoje okno na 'layered window' (patrz Win SDK). W sieci można znaleźć moduł alphaeffects, tam masz przykład czegoś podobnego (tylko bez wykorzystania PNG).

0

Konwertując PNG do BMP obrazek chyba nie zachowa swoich własności w postaci cieniów i przezroczystości kolorów ;)

PS.: Nie ma sposobu, żeby odświeżyć ten bsClear? Przeszukałem połowę Internetu i nic :( Chyba zostanie mi tylko ręczne rysowanie Canvasem bo to taki Splash Screen :/

0
Andre napisał(a)

Konwertując PNG do BMP obrazek chyba nie zachowa swoich własności w postaci cieniów i przezroczystości kolorów ;)

Mówiłem o bitmapie 32bitowej :P

Andre napisał(a)

PS.: Nie ma sposobu, żeby odświeżyć ten bsClear?

Ale Ty w końcu chcesz, żeby forma brała (pół)przezroczystość z pliku PNG, czy jak? zmiana pędzla formy na bsclear tu chyba niewiele daje? :P</quote>

0

spróbuj tego:

SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, Kolor_przezroczystości, 0 , LWA_COLORKEY);
0

Pokaże to na przykładzie:

Tworze formę o wymiarach obrazka który jest na dole. Kłade na nią Image a w nim ten obrazek (PNG widać, że obrazek ma cienie). W OnCreate formy daje Form1.Brush.Style := bsClear i BorderStyle na None. Podczas uruchomienia wszystko jest tak jak chce, to znaczy wyświetla mi się obrazek z pełną obsługą PNG z Alpha Channelem na ekranie. Dodam, że forma (jej nie widać) jest zawsze na wierzchu. Wszystko by było ok, jakby nie to, że wystarczy, że byle jakie okno najedzie na moją formę (tzn. obrazek) i na formie zostaje po tym ślad. Stąd chcę się dowiedzieć jak można odświeżyć wtedy formę, albo znaleźć jakiś komponent, który będzie działał lepiej od bsClear. Mam nadzieję, że teraz wszystko jest zrozumiałe :)

user image - obrazek

user image - forma po kompilacji

user image - forma po najechaniu na nią jakeigoś okna :/

0
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, ColorToRGB(clBtnFace), 0 , LWA_COLORKEY);

to u mnie załatwia sprawę - bo sprawdziłem

0

Dziwne, dałem to w OnCreate i powstało takie coś zamiast cienia: :(

user image

0

Obrazek masz w TImage

0

sprobuj raczej nie z OnCreate, ale OnPaint, moze pomoze ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0