![]() |
Firemonkey: Animationen in Frames?
Moin.
Ich experimentiere gerade mit FM rum und bin da wohl auf ein Problem gestoßen: Wenn man ein FMX-Frame in die Hauptform einbettet und dieses Frame eine Animation hat (z.B. einen Shape per ColorKey-Animation in der Farbe ändern), dann wird diese Animation nicht abgespielt. Nimmt man statt eines Frames eine Form, funktioniert alles. Nach Analyse des Quellcodes wird bei [MyAnimation].Start u.a. folgende Codezeile abgearbeitet: Zitat:
Frage: Sind Animationen dieses Art in Frames nicht möglich?? Gruß, Marc |
AW: Firemonkey: Animationen in Frames?
Aha, nächste Erkenntnis:
TCustomForm implementiert 'IRoot', TFrame nicht. Daher funktionieren Komponenten-basierte Animationen nicht in Frames. Na super...:twisted: Marc |
AW: Firemonkey: Animationen in Frames?
Dann verwende eine Form. Die kannst Du in FMX ja genauso wie einen Frame verwenden.
|
AW: Firemonkey: Animationen in Frames?
Liste der Anhänge anzeigen (Anzahl: 1)
Kann ich so nicht wirklich nachvollziehen.
Ein Button auf einem Frame kann ich per FloatAnimation in der Höhe ändern. |
AW: Firemonkey: Animationen in Frames?
Richtig - aber nicht, wenn Du eine Animation-Komponente verwendest. Die funktionieren nicht...
LG, Marc |
AW: Firemonkey: Animationen in Frames?
Zitat:
|
AW: Firemonkey: Animationen in Frames?
Zitat:
|
AW: Firemonkey: Animationen in Frames?
Zitat:
|
AW: Firemonkey: Animationen in Frames?
Interessant - mit TButton geht es. Und nun probiere es mal mit TRectangle und einer ColorKey-Animation. Die geht auf einer Form aber nicht in einem Frame.
Oder geht das bei Dir auch? LG, Marc |
AW: Firemonkey: Animationen in Frames?
Also, das scheint irgendwie an der ColorKey-Animation zu liegen. Mit der Color-Animation geht's...
Das Problem scheint hier zu liegen:
Delphi-Quellcode:
Die Zeile:
procedure TColorKeyAnimation.ProcessAnimation;
var T: TRttiType; P: TRttiProperty; Key1, Key2: TKey; begin if FInstance <> nil then begin if FKeys.FindKeys(NormalizedTime, Key1, Key2) then begin if (TFloatKey(Key2).Key - TFloatKey(Key1).Key) = 0 then Exit; T := SharedContext.GetType(FInstance.ClassInfo); if T <> nil then begin P := T.GetProperty(FPath); if (P <> nil) and P.PropertyType.IsOrdinal then P.SetValue(FInstance, InterpolateColor(TColorKey(Key1).Value, TColorKey(Key2).Value, (NormalizedTime - TFloatKey(Key1).Key) / (TFloatKey(Key2).Key - TFloatKey(Key1).Key))); end; end; end; end;
Delphi-Quellcode:
verhält sich in einer Form anders als in einem Frame. In einem Frame sind beide Werte = 0, sodaß mit "Exit" aus der Methode gesprungen wird. Bei einer Form nicht. Hier ist der erste Wert = 1 und der zweite = 0.
if (TFloatKey(Key2).Key - TFloatKey(Key1).Key) = 0 then
??? Gruß, Marc |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz