Hallo zusammen
Wer weiss, wie man per Script einen Dummy-Element erzeugen kann?
Danke Michel
Hallo zusammen
Wer weiss, wie man per Script einen Dummy-Element erzeugen kann?
Danke Michel
Mit der Factory. Wenn du es danach in eine Playlist einfügen o.ä. willst, musst du einen Typecast nach IPlaylistItem machen:
var
dpi: IDummyPlaylistItem;
pi: IPlaylistItem;
begin
dpi := Factory.CreateDummyPlaylistItem;
pi := IPlaylistItem(dpi);
end.
Erstmals Danke!
Folgender Hintergrund: Ich habe für meine Leute diverse Scripts im ActionMenü abgelegt. Dort lassen sich alle Live gefahrenen Stunden (pro Stunde eine Playlist) in einem Stück einfügen. Leider trauen nicht alle, dieser einfachen und genialen Lösung, und fügen manuell die Playlisten ein.
Ich möchte nun in diesem Script, sofern die Playlist erfolgreich geladen wurde, am Anfang der Playlist ein Dummy Element “Stunde x erfolgreich eingefügt” erzeugen.
Michel
Okay, ich kann nun auf Position 0 ein Dummy Element einfügen.
Kann ich dieses bereits vor dem Einfügen bearbeiten?
[code]var
dpi: IDummyPlaylistItem;
pi: IPlaylistItem;
begin
dpi := Factory.CreateDummyPlaylistItem;
pi := IPlaylistItem(dpi);
CurrentPlaylist.Insert (0,pi);
end.[/code]
Klar. Du kannst einfach die ganzen Set-Methoden von IPlaylistItem verwenden, die in der Hilfedatei aufgeführt sind.
pi.SetTitle('Ich bin ein Dummy');
Ich raffe dies mit diesen pi noch nicht. Ist Pi eine virtuelle Playlist, welche anschließend eingesetzt wird?
Eventuell hilft mir folgender Tipp. Wie kann ich zwei Dummy Element erzeugen?
Nein, pi ist nur ein einzelnes Element.
Hier mal die lange Erklärung zu dem Code:
Bei “IPlaylistItem” und “IDummyPlaylistItem” handelt es sich um zwei sogenannte “Interfaces”, also Sammlungen von Funktionen, die man auf ein Objekt anwenden kann. Die sind ja in der Script-Hilfe alle aufgezählt.
Dabei enthält IPlaylistItem die Funktionen, die allen verschiedenen Arten von Playlist-Elementen gemeinsam sind, zum Beispiel zum Lesen und Schreiben von Interpret und Titel usw. Halt alle Dinge, die es bei jedem Playlist-Element gibt.
Dann gibt es Operationen, die bei bestimmten Playlist-Elementen Sinn machen. Zum Beispiel “SetFilename”, also das Setzen des Dateinamens. Das macht nur Sinn, wenn es sich bei dem Element tatsächlich um ein Dateielement handelt und nicht um ein Stream, ein Dummy usw. Daher unterstützt (oder “implementiert”, wie man technisch sagt) jede Elementklasse noch je ein zweites Interface, das die speziellen Operationen enthält. Das sind dann IFilePlaylistItem, IDummyPlaylistItem, IStreamPlaylistItem, IContainerPlaylistItem usw.
Die Factory-Methode “CreateDummyPlaylistItem” erzeugt nun im RAM ein neues Dummy-Objekt und gibt dir eine Referenz auf dieses Objekt zurück, in Form einer IDummyPlaylistItem-Variable:
dpi := Factory.CreateDummyPlaylistItem;
Du kannst nun “dpi” verwenden, um erstmal alle speziellen Dummy-Operationen darauf auszuführen - was bei Dummys leider relativ witzlos ist, weil die gar keine zusätzlichen Operationen haben Aber ganz allgemein wäre das jetzt halt die Stelle für die “speziellen” Sachen.
Danach willst du sicherlich die Operationen verwenden, die allgemein auf jedes Playlist-Element zutreffen, also zum Interface IPlaylistItem gehören. Wir können uns ja sicher sein, dass jedes Dummy diese unterstützt, also können wir einen sogenannten “Typecast” machen: Wir kopieren die Referenz “dpi” in eine zweite Variable “pi”, wobei diese jetzt vom Typ “IPlaylistItem” ist:
pi := IPlaylistItem(dpi);
pi zeigt nun auf das gleiche Objekt im RAM, allerdings verwenden wir pi jetzt, um die “normalen” Element-Operationen auszuführen:
pi.SetTitle('blablup');
Zum Schluss wollen wir das neue Element auch in die Playlist einführen. Dazu hat CurrentPlaylist (was übrigens ebenfalls ein Interface zurückliefert, nämlich IPlaylist) die Methode “Insert”, die neben dem Einfüge-Index noch eine Variable vom Typ IPlaylistItem erwartet, die eben eine Referenz auf das einzufügende Element ist:
CurrentPlaylist.Insert(0, pi);
Schon ist das Dummy in die Playlist eingefügt. Wenn du noch ein zweites einfügen willst, kopierst du einfach die Zeilen “dpi := Factory.CreateDummyPlaylistItem” bis “CurrentPlaylist.Insert(0, pi);”. Neue Variablen brauchst du nicht zu deklarieren, du kannst einfach wieder dpi und pi benutzen.
Das mit den Typecasts und der zweiten Variable ist zugegebenermaßen etwas unschön. Ab mAirList 3.0 wird es daher möglich sein, auch über die “speziellen” Interfaces die Operationen von IPlaylistItem auszuführen, dank Vererbung. Dann sähe der Code nur noch so aus:
var
dpi: IDummyPlaylistItem;
begin
dpi := Factory.CreateDummyPlaylistItem;
dpi.SetTitle('blablup');
CurrentPlaylist.Insert(0, dpi);
end.
Torben
Danke, ich werde mir morgen einen Kaffee herauslassen und das ganze nochmals lesen :-\