[DELPHI] Image na Buttonie

0

Witam. Zrobiłem taką konstrukcję że mam obrazek z tłem, na nim ikonę (w osobnym image), oraz label z nazwą, a na nich jeszcze jeden duży, pusty image o identycznej wielkości jak image z tłem.

Czyli tak by to wyglądało od dołu:
Warstwa 1: Animowane tło (po najechaniu myszą z czarnego robi się niebieskie).
Warstwa 2: Nazwa przycisku (label) oraz reprezentująca go ikona (image) - innymi słowy treść przycisku.
Warstwa 3: "Tafla" do obsługi zdarzenia najechania myszą... Po co to? Dajmy na to wskakuje myszą na pierwszą warstwę z tłem - wszystko śmiga. Ale już najechanie na label czy image z ikoną, spowodowało by zdarzenie dla OnMouseLeave (bo przecież wchodząc w obszar któregoś z tych obiektów, tak na prawdę opuściłem obszar tła!). Tak samo w drugą stronę, najechanie myszą na label czy ikonę nie spowodowało by przecież odpalenia OnMouseEnter dla tła... Dlatego też zmienne odpowiedzialne za zmianę wyglądu warstwy 1 czyli tła przycisku, są umieszczone w warstwie 3. Jest przezroczysta, pokrywa cały obszar przycisku, więc nie wchodzi w konflikt z elementami warstwy 2 które są pod nią... Mam nadzieję że rozumiecie :)

I teraz właściwy problem. Postanowiłem image z warstwy 1 (czyli tło przycisku), zastąpić specjalnym BitButtonem. Działa tak samo jak standardowy BitBtn z delphi, czyli pozwala wrzucić doń obrazek, ale z tą różnicą że przy zmianie obrazka po najechaniu myszą czy też kliknięciu, nie następuje to natychmiastowo, lecz jest okraszone ładną animacją przechodzenia jednego obrazka w drugi...
No i wszystko było by super, gdyby nie to że nie da się cholera wrzucić na button obrazka!!! (a bez tego nie mogę umieścić ikony ze środkowej warstwy). To znaczy teoretycznie niczego się nie da położyć na buttonie, ale dynamicznie już jakoś idzie. Image też (teoretycznie) można stworzyć (wiem bo warstwa 3 czyli ta do obsługi zdarzenia pojawia się i działa jak trzeba), ale obrazek wyświetlony na takim dynamicznym image, się po prostu nie pojawia! (to znaczy z tego co widzę, on tam jest ale POD buttonem a nie na nim, mimo że ułożenie komponentów sugeruje coś innego).

Mi do głowy przychodzą takie rozwiązania:

1). Zespolić warstwę 1 i 2 (czyli tło z napisem i ikoną). Niestety odpada, muszę mieć możliwość zmiany tychże, przemieszczania ich - nie mogą być elementem tła.
2). Narysować przez Canvas - niestety też mi to nie pasi, potrzebuję mieć te elementy jako fizyczne części programu (komponenty), do obsługi zdarzeń i innych dupereli. Poza tym są spore problemy z repaintem, bo jak już wspomniałem wyświetlana jest animacja, musiał bym przerysowywać przy każdej klatce animacji...
3. Olać ten komponent i samemu (np. w Timerze) zrobić taką animację poklatkowo i wyświetlić ją w image. Jest to możliwe i dosyć proste, ale strasznie muli procesor... Nie wiem jak to cholera działa w tych wszystkich komponentach wizualnych czy nawet Windowsie 7 - że tam te animacje chodzą płynnie nawet na starym laptopie, a gdy sam chcę coś takiego poklatkowo zrobić, to procesor zdycha...

Macie może jakieś pomysły? Jak poradzić sobie z tym image na buttonie, albo jak zrobić taką animację w bardziej wydajny sposób?

Pozdrawiam.

0

napisz wlasny komponent - label, tlo i image rysujesz na canvasie komponentu.
plynne przejscia nie beda mulic procesora szczegolnie jesli to zrobisz na scanline.

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