leider werden meine Skripte nicht mehr ausgeführt (werden über Hotkey ausgelöst). Z.B. dieses Next-Skript:
[code]var i, player, item: integer;
begin
player := -1;
item := -1;
for i := 0 to CurrentPlaybackControl.GetPlayerCount - 2 do
if ((CurrentPlaybackControl.GetPlayer(i).GetState = PS_LOADED) or
(CurrentPlaybackControl.GetPlayer(i).GetState = PS_PAUSED))
and
((item = -1) or
(CurrentPlaylist.IndexOf(CurrentPlaybackControl.GetPlayer(i).GetItem) < item))
then begin
player := i;
item := CurrentPlaylist.IndexOf(CurrentPlaybackControl.GetPlayer(i).GetItem);
end;
if (player = -1) then
SystemLog(‘Keinen freien Player gefunden.’)
else begin
CurrentPlaybackControl.PlayerStart(player);
for i := 0 to CurrentPlaybackControl.GetPlayerCount - 2 do
if i <> player then begin
if CurrentPlaybackControl.GetPlayer(i).GetItem <> nil then
CurrentPlaybackControl.GetPlayer(i).GetItem.SetFadeDuration(10000000);
CurrentPlaybackControl.PlayerFadeOut(i);
end;
end;
end.[/code]
Da sich die interne Struktur von mAirList bedeutend geändert hat, gibt es auch für Scripts viele kleine und große Sachen, die man anpassen muss. Ich lade gleich mal eine aktuelle chm-Datei hoch, da könnt ihr euch dann durchwühlen.
PS_LOADED heißt jetzt psLoaded.
Ach, ja der. Stimmt. Den hab ich mal irgendwann anfangen zu programmieren, bin aber nicht fertig geworden, wie man sieht. Bitte erstmal ignorieren.
Sorry, aber ich verstehe nur Bahnhof und das obwohl ich wirklich ein gesundes Computerwissen habe. Darf ich freundlich fragen, ob jemand so nett ist, mir mein Skript zu übersetzen? Das PS_Loaded habe ich ersetzt. Leider funktioniert’s aber immer noch nicht.
Sorry, das übersteigt jetzt gerade meinen zeitlichen Horizont. Aber da gibt’s ja noch ein, zwei andere Leute hier, die sich mit dem Gescripte auskennen
Dass wegen eines Fehlers im Script gleich der Call Stack hochpopt ist übrigens nicht gewollt. Eine einfache Dialogbox tut’s auch. Werde ich mal ändern.
Den Fehler kenn ich. Das liegt an den den Sicherheitseinstellungen des Internet Explorers. Dein Windows hat sich gemerkt, dass die CHM-Datei aus dem Web stammt. Und nun weigert sich der eingebettete IE, das HTML in der Hilfedatei anzuzeigen.
Aber frag mich nicht, was man machen musste, um das zu ändern. Vielleicht mal die Forumssuche bemühen, irgendwo stand das.
Hmm, wie in einem anderen Thread genannt, habe ich nun alle “CurrentPlaybackControl” durch “PlaybackControl(1)” ersetzt. Leider klappt das Skript noch immer nicht, nach wie vor kommt “[Fehler] (12:1): Type mismatch”. Ich vermute, dass es an dem “then begin” liegt.
Torben, kannst du helfen?
So sieht das Skript aktuell aus:
[code]var i, player, item: integer;
begin
player := -1;
item := -1;
for i := 0 to PlaybackControl(1).GetPlayerCount - 2 do
if ((PlaybackControl(1).GetPlayer(i).GetState = psLoaded) or
(PlaybackControl(1).GetPlayer(i).GetState = psPaused))
and
((item = -1) or
(CurrentPlaylist.IndexOf(PlaybackControl(1).GetPlayer(i).GetItem) < item))
then begin
player := i;
item := CurrentPlaylist.IndexOf(PlaybackControl(1).GetPlayer(i).GetItem);
end;
if (player = -1) then
SystemLog(‘Keinen freien Player gefunden.’)
else begin
PlaybackControl(1).PlayerStart(player);
for i := 0 to PlaybackControl(1).GetPlayerCount - 2 do
if i <> player then begin
if PlaybackControl(1).GetPlayer(i).GetItem <> nil then
PlaybackControl(1).GetPlayer(i).GetItem.SetFadeDuration(10000000);
PlaybackControl(1).PlayerFadeOut(i);
end;
end;
end.[/code]
Ahso, ich dachte, das hätte vielleicht mit der neuen Skriptsprache zu tun. Weil früher ging dieses Automationsskript ja auch immer mit CurrentPlaybackControl. Na dann war das wohl ein Griff ins Klo.
Aber vielleicht magst du mir ja trotzdem helfen, bringt bestimmt auch anderen was, wenn die sehen, was man ändern muss!
begin
player := -1;
item := -1;
for i := 0 to PlaybackControl(1).GetPlayerCount - 2 do
if ((PlaybackControl(1).GetPlayer(i).GetState = psLoaded) or
(PlaybackControl(1).GetPlayer(i).GetState = psPaused))
and
((item = -1) or
(CurrentPlaylist.IndexOf(IInterface(PlaybackControl(1).GetPlayer(i).GetItem)) < item))
then begin
player := i;
item := CurrentPlaylist.IndexOf(IInterface(PlaybackControl(1).GetPlayer(i).GetItem));
end;
if (player = -1) then
SystemLog(‘Keinen freien Player gefunden.’)
else begin
PlaybackControl(1).PlayerStart(player);
for i := 0 to PlaybackControl(1).GetPlayerCount - 2 do
if i <> player then begin
if PlaybackControl(1).GetPlayer(i).GetItem <> nil then
PlaybackControl(1).GetPlayer(i).GetItem.SetFadeDuration(10000000);
PlaybackControl(1).PlayerFadeOut(i);
end;
end;
end.[/code]
Danke erst mal für deine Hilfe so weit! Ich habe das Ganze jetzt angepasst. Jetzt kommt keine Fehlermeldung mehr, allerdings tut sich auch nichts. Hier mal das Skript, so wie es jetzt aussieht:
[code]var i, player, item: integer;
begin
player := -1;
item := -1;
for i := 0 to PlaybackControl(1).GetPlayerCount - 2 do
if ((PlaybackControl(1).GetPlayer(i).GetState = psLoaded) or
(PlaybackControl(1).GetPlayer(i).GetState = psPaused))
and
((item = -1) or
(CurrentPlaylist.IndexOf(IInterface(PlaybackControl(1).GetPlayer(i).GetItem)) < item))
then begin
player := i;
item := CurrentPlaylist.IndexOf(IInterface(PlaybackControl(1).GetPlayer(i).GetItem));
end;
if (player = -1) then
SystemLog(‘Keinen freien Player gefunden.’)
else begin
PlaybackControl(1).GetPlayer(player).Start;
for i := 0 to PlaybackControl(1).GetPlayerCount - 2 do
if i <> player then begin
if PlaybackControl(1).GetPlayer(i).GetItem <> nil then
PlaybackControl(1).GetPlayer(i).GetItem.SetFadeDuration(10000000);
PlaybackControl(1).GetPlayer(i).FadeOut;
end;
end;
end.[/code]
Nee. Musst du wohl mal debuggen. An den entsprechenden Stellen SystemLog(…) einfügen und Meldungen ausgeben lassen um zu gucken, ob die Verzweigungen alle so funktionieren wie sie sollen, zum Beispiel.