Cień dla formy, Windows 7 style ;)

0

Witam, zagadnienie z którym mam problem było wałkowane na forum wiele razy, ale jako że jest dosyć skomplikowane, to niczego konkretnego się ustalić nie udało.
Chodzi oczywiście o (jak w temacie) cień dla formy programu, mniej więcej taki jaki jest w Windows 7. Nie mogę po prostu zdać się na efekt windowsowy, ponieważ po 1 - aplikacja ma chodzić także na XP (w którym to jeszcze nie było takiego efektu), po 2 - nie używam standardowego okna, zamiast niego mam bitmapę (więc nawet W7 odmawia współpracy w takiej sytuacji). Wiem że od czasów Windowsa XP można programowo wymusić rzucanie cienia (działa nawet z bitmapą), ale efekt jest biedny i niestety nie dopasowuje się do kształtu tła (np. bitmapa jest pół-okrągła, ale rzuca kwadratowy cień ;P).

Na początku wydawało by się że najprościej będzie ten cień narysować w jakimś programie graficznym i potem zrzucić do Delphi. Niestety kochany programik, koszmarnie nie radzi sobie z przezroczystością (nawet w odpowiednich formatach typu PNG czy 32 bitowa bitmapa). Są niby różne rozwiązania, ale bardzo skomplikowane i problematyczne (trzeba tworzyć 2 formy i nakładać je na siebie, a potem wycinać).

Kolejna (i jak na razie ostatnia) koncepcja to wytworzenie (jakoś) tego cienia w locie, już podczas działania programu... Wpadł mi w ręce komponent który (między innymi) to potrafi, niestety zasada jego działania jest taka jak w Windows 7 - cień robi, ale tylko dla okna, dla bitmapy już nie... Niemniej dzięki temu wiem że to jak najbardziej możliwe (także na XP, efekt z tego komponentu jak żywcem przeniesiony z W7), tyle tylko że nie wiem jak się za to zabrać, może trzeba by zastosować jakieś rozmycie krawędzi? (tak właśnie powstaje cień w programach graficznych, pod warstwę z obrazkiem wrzucana jest podobna, o takim samym kształcie, tylko jakieś 2-3 piksele większa i pomalowana na czarno. Potem się rzuca na to rozmycie gaussa i cień gotowy). Niestety nie mam pojęcia jak to zrobić w Delphi, a tym bardziej jak to robić w locie by działało płynnie i nie zakorkowało procesora na amen. Może macie jakieś pomysły/sugestie?

Pozdro.

0

Poczytaj o regionach w WinApi, maskach i przezroczystości. Ale tak czy inaczej proste to nie jest.

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