огнена маймуна. От просто към сложно #5. Ефекти на преход за компоненти.

Естествено, ние имаме право да приложим анимация за този ефект, на което и да е от неговите свойства, например, за да накараме отражението плавно да се разтяга или, обратно, да се свива при някакво събитие. Това се прави по принцип доста елементарно. Достатъчно е да напишете нещо като този код:

И в резултат на това ще получим следния визуален ефект за текста във формата:

По принцип няма нищо сложно - добавихме анимация за свойствотоLength и я скролнахме в двете посоки. Работата използва един компонент и един визуален ефект.

По-интересни във FireMonkey са ефектите на прехода. Такива ефекти, освен че съдържат подниза „Transition” в името, се различават от всички други компоненти за ефекти и по наличието на свойствотоProgress, което се използва за управление на ефекта.

Например, обмислете използването на ефект на преход върху две изображения. Нека създадем нов проект за FireMonkey HD приложение, хвърлим компонент TImage в основната форма на приложението и заредим изображение в него:

огнена

Сега нека хвърлим ефект на преход къмTImage, напримерBloodTransitionEffect. Свойството по подразбиране за ефекта на прехода еПрогрес=30, променете го на0.

Сега зареждаме друго изображение в свойството Target на ефекта, например това:

сложно

И както в предишния пример за TReflectionEffect, ще използваме анимация, но само за свойствотоProgress :

В резултат на това получаваме толкова интересен ефект от прехода на едно изображение към друго:

Други ефекти на преход работят по същия начин. Въпреки факта, че за да се изпълнят такива ефекти, е необходимо да има целево изображение, в което текущото ще бъде преобразувано, никойне ни е забранено да използваме този вид визуални ефекти за преход от един контрол на формата към друг.

За да демонстрираме това с пример, нека направим така, че обичайният списъкTListBox да се превърне в TStringGrid (точно както във филма - „Панталоните се превръщат ... в елегантни шорти“ (c)). Нека премахнем компонентитеTListBox иTStringGrid, TButton във формуляра, както и ефекта на прехода, да речем,WiggleTransitionEffect. Нека добавим няколко елемента към ListBox (чисто за пример). Сега ще напишем следния манипулатор на OnClick на бутона:

Резултатът ще бъде следната "трансформация" на списъка в таблица и обратно:

За съжаление, отново видеото не предава точно и точно красотата на този визуален ефект, така че можете да го повторите във вашето приложение и да погледнете резултата.

Всъщност в кода по-горе направихме следното: в зависимост от елемента на формуляра, който потребителят вижда в момента, направихме екранна снимка на този контрол, използвайки неговия методMakeScreenshot и го предадохме наTarget на ефекта. След това превъртяхме анимацията от0 до 100 и вдигнахме необходимия контрол до върха. Е, тъй като правим прехода от контрол към контрол с помощта на растерно изображение, ние възпроизвеждаме анимацията чрез методаAnimateFloatWait, т.е. изчакваме докато анимацията стигне до края и след това продължаваме кода и по този начин създаваме пълния вид на „трансформацията“.

Според мен би било интересно/полезно/изгодно (подчертайте, ако е необходимо) да използвате такива ефекти на преход, например, когато има малко място във формуляра или просто няма желание да поставите контроли катоTabControl върху него и искате да направите „жив” програмен интерфейс. Е, ако, като се има предвид примерът на горната част от програмата, тогава малкослед като сте работили върху стиловете на контролите, можете да постигнете доста красива „трансформация“.