Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Eine Action (TActionList) für mehrere dynamische Komponenten führt zu Problemen (https://www.delphipraxis.net/199778-eine-action-tactionlist-fuer-mehrere-dynamische-komponenten-fuehrt-zu-problemen.html)

AuronTLG 19. Feb 2019 16:30

Eine Action (TActionList) für mehrere dynamische Komponenten führt zu Problemen
 
Moin,

ich habe folgendes Problem:

Ich baue eine Maske auf, auf der man eine beliebige Anzahl von Audiodateien abspielen kann, indem für jede vorhandene Audiodatei ein passendes dynamisch erzeugtes Layout (Start/Pause-Button, Stop-Button, ProgressBar) angezeigt wird, d.h. jede Audiodatei hat ein "Mediaplayer-Layout".

Die ProgressBars dieser Layouts betreibe ich mithilfe einer "MediaPlayerCurrentTime"-Action, sodass diese ganz normal AktuelleZeit / Gesamtlänge der laufenden Audiodatei animiert anzeigen.
Das funktioniert so, dass beim Start drücken der entsprechende ProgressBar "MediaPlayerCurrentTime" als Action zugewiesen bekommt und bei Stop die Action-Eigenschaft wieder auf Nil gesetzt bekommt.

Das Problem dabei ist nun folgendes: Bei der ersten Audiodatei, die abgespielt wird, sieht alles ganz normal aus, doch danach bleibt die "MediaPlayerCurrentTime"-Action anscheinend krampfhaft an die erste benutzte ProgressBar gekoppelt, d.h. nur diese wird animiert, ganz gleich, auf welches Layout eigentlich zugegriffen wird.
Ich habe per Log die Eigenschaft MediaPlayerCurrentTime.Target an den entsprechenden Stellen überprüft und es steht immer die richtige ProgressBar drin, dennoch wird immer nur die ProgressBar angesteuert, die als erstes die Action zugewiesen bekam.

Ich habe unter Anderem auch probiert, inaktiven ProgressBars eine Dummy-Action zuzuweisen, leider auch ohne Erfolg.

Meine Erfahrung mit der Nutzung von Actions in Firemonkey beschränkt sich leider im Wesentlichen auf Fotos machen und das Steuern EINES Mediaplayer-Layouts, von daher weiß ich leider nicht genau, ob die Art und Weise, wie ich hier mit der Action umgehe, überhaupt so gedacht ist, da so ein dynamisches Zuweisen vorher nie nötig war.
Ich wäre für jeden Tipp oder Erfahrungsbericht dankbar...

Delphi.Narium 19. Feb 2019 17:05

AW: Eine Action (TActionList) für mehrere dynamische Komponenten führt zu Problemen
 
Problem erkannt und verstanden.

Aber:

Ohne den passenden Quelltext sehe ich keine Chance auch nur annähernd in die Nähe eines möglichen Implementierungs- und/oder Designfehlers zu gelangen.

Prinzipiell scheint mir das ein typisches Problem zu sein, dass man mit Hilfe von Frames lösen kann.

Bau Dir ein Frame, das alles, wirklich alles enthält, was Du für "eine" Audiodatei benötigst. Die Actionlist und die Action gehören mit auf das Frame, ebenso Progressbar und was auch immer Du für die Wiedergabe und/oder optische Gestaltung benötigst. Danach sollte alle Logik nur noch innerhalb des Frames passieren. Kein Frame weiß, ob es das einzige ist und / oder noch "Geschwister" hat.

Wenn dann alle Zugriffe, Anzeigen, das Abspielen der dem "Frame gehörenden Datei" innerhalb des Frames passiert, kann es den von Dir beschriebene Effekt nicht mehr geben.

Pro Audiodatei wird dann ein Frame dynamisch erstellt und enthält damit die gesamte Logik zu "dieser" Datei.

Genaugenommen entsteht dabei eine von TFrame abgeleitete Klasse, die die Wiedergabe einer Audiodatei kapselt.

Pro Audiodatei gibt es dann zur Laufzeit eine Klasse.

AuronTLG 20. Feb 2019 10:46

AW: Eine Action (TActionList) für mehrere dynamische Komponenten führt zu Problemen
 
Mit Frames habe ich tatsächlich bisher noch nicht gearbeitet.
Werde ich mir mal anschauen, vielen Dank für den Tipp!

AuronTLG 4. Mär 2019 10:48

AW: Eine Action (TActionList) für mehrere dynamische Komponenten führt zu Problemen
 
Nur als Nachtrag:

Gekapselter "MediaPlayer"-Frame mit eigenem MediaPlayer und eigener ActionList funktioniert hervorragend und genauso wie es soll.

Danke nochmal für den Tipp.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz