Minule se někdo ptal v komentářích jak se to bude asi dělat v Windows 8 Metro bez modálních formulářů při změně aktuálního formuláře na jiný. Inu zamyslel jsem se a za pomocí jednoho ukázkového příkladu jsem takovou změnu naprogramoval (pravda trošku moc extrémní, ale aspoň to demonstruje možnosti). Přeložené EXE ke stažení pro vyzkoušení!
Jako dvě rozdílné obrazovky jsem si připravil dvě záložky (to není důležité, mohou to být dva docknuté formuláře nebo cokoliv jiného) - to je jen příklad. Na jedné jsou nějaké komponenty a tlačítko pro přepnutí, na druhé zase naopak.
Ale pozor - na formuláři je vložen TLayer3D (něco jako Panel, ale s možností 3D transformace) a teprve na něj je TabControl a záložky.
Jádrem pudla je metoda mSwitchTab.
procedure TForm29.Button2Click(Sender: TObject);
begin
mSwitchTab(TabItem1);
end;
procedure TForm29.mSwitchTab(newTab: TTabItem);
procedure mRotate(at:TAnimationType);
begin
if ClientWidth > ClientHeight then
Layer3D1.AnimateFloat('RotationAngle.X', 360, 1.5, at,
TInterpolationType.itBack)
else
Layer3D1.AnimateFloat('RotationAngle.Y', 360, 1.5, at,
TInterpolationType.itBack);
end;
begin
mRotate(TAnimationType.atIn);
Layer3D1.AnimateFloatWait('Position.Z', 500, 1);
TabControl1.ActiveTab := newTab;
mRotate(TAnimationType.atOut);
Layer3D1.AnimateFloatDelay('Position.Z', 0, 1, 1);
end;
procedure TForm29.Button1Click(Sender: TObject);
begin
mSwitchTab(TabItem2);
end;
Začíná to procedurou mRotate, která provádí rotaci uvedeného Layeru ve 3D buďto v X nebo Y. Rotace je o 360 stupňů a trvá 1.5 sekundy a je asynchronní, tj. začne - ale program v uvedené metodě jede dál.
Dalším krokem je animace ve směru Z, tj. (vzdálení nebo přiblížení) - to ale začne probíhat zároveň s rotací, tj. hezky nám obsah Layer3D rotuje a zároveň se zmenšuje což opticky vyvolá dojem vzdalujícího se odlétajícího obsahu.
Ale všimněte si, že je volána metoda AnimateFloatWait místo v předchozím případě AnimateFloat, tj. je to sice interně asynchroní, ale čeká se na dokončení. A právě v okamžiku dokončení přehodím záložku čehož si uživatel nemá šanci všimnout, jelikož si právě dává zpět pokleslou čelist, resp. jde si pro prášek na bolení hlavy.
No a následně si zarotujeme ještě jednou (již s novou záložkou) a s přiblížením. V druhém případě je to úplně stejné, jen s jinou záložkou.
Uznávám je to extrém a bohatě by stačilo odsunutí nebo jedno otočení (případně překrytí), ale jedná se o ukázku, kterou si můžete stáhnout se zdrojovými kódy a exe pro Win32: FireMonkey 3D animace (1.5M, ZIP).
Jen poslední poznámka: během animace lze dál provádět operace (i od uživatele) - je to "asynchronní".
Připomínám, že na Windows Vista (asi se service packem) nebo Windows 7 to poběží v DirectX módu, jinde v GDI+ módu. TLayer3D potřebuje moderní grafickou kartu (většinou stačí cokoliv novějšího roku 2003).