Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi iTunes-Track herausfinden (https://www.delphipraxis.net/51826-itunes-track-herausfinden.html)

CalganX 19. Aug 2005 17:04


iTunes-Track herausfinden
 
Hi,
ganz so einfach, wie der Titel es scheinen lässt, ist es auch wieder nicht. ;)
Ich versuche gerade ein wenig mit der iTunes-COM-API herumzuspielen. Soweit funktioniert das auch ganz akzeptabel, aber es hakt bei einer Sache:

In einem Event erhalte ich als Parameter eine ID eines Tracks in Form eines OleVariants. Darüber ist es irgendwie Möglichkeit eine Variable vom Typ IITTrack zu erhalten. Da ich das nicht so ganz kapiert habe, habe ich mal gesucht und im CodeProject auch was gefunden.
Dort steht für C#:
Code:
protected void myiTunes_OnPlayerPlayEvent(object iTrack)
{
  string myArtist, myName;

  IITTrack myTrack = (IITTrack) iTrack;
  myArtist = myTrack.Artist;
  myName = myTrack.Name;
}
Ich hab's ausprobiert: das funktioniert wirklich.

Also dachte ich mir, dass es unter Delphi ja fast genauso gehen könnte:
Delphi-Quellcode:
procedure TEventHandler.OnPlayerPlayEvent(Sender: TObject; iTrack: OleVariant);
var
  Track: IITTrack;
begin
  {Einen Track aus iTunes Anhand der ID finden}
  Track := IITTrack(iTrack); {Zeile 54}

  // ...
end;
Doch leider funktioniert das nicht mit dem Fehler
Fehlermeldung:
[Fehler] uITunes.pas(54): E2089 Ungültige Typumwandlung


Hat jemand eine zündende dafür? :?

Chris

shmia 19. Aug 2005 18:14

Re: iTunes-Track herausfinden
 
Delphi-Quellcode:
procedure TEventHandler.OnPlayerPlayEvent(Sender: TObject; iTrack: OleVariant);
var
  Track: IITTrack;
begin
  // kleine Sicherheitsüberprüfung
  Assert(VarType(iTrack) = varDispatch);

  // umwandeln
  Track := IDispatch(iTrack) as IITTrack;

CalganX 19. Aug 2005 18:22

Re: iTunes-Track herausfinden
 
Hi,
yeah, danke dir! :thumb:
Scheint zu funktionieren. :)

Chris

jakobwenzel 6. Nov 2005 16:10

Re: iTunes-Track herausfinden
 
Kannst du bitte mal den gesamten Quellcode posten, denn ich habe das Problem, dass ich nicht verstehe, wie man die Ereignisse von iTunes implementieren muss.

CalganX 6. Nov 2005 16:58

Re: iTunes-Track herausfinden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
guck dir mal diesen Thread an. Mit dem verlinkten Tool (EventSinkImp) kannst du dir eine Unit erstellen, die alle Events so wrappt, dass du sie einfacher verwenden kannst.

Wenn du dann die Typenbibliothek und die neue Unit in deine Uses eingefügt hast, kannst du dir die Unit im Anhang ansehen (!). Direktes Weiterverwenden der Unit untersagt.

Chris

jakobwenzel 6. Nov 2005 18:08

Re: iTunes-Track herausfinden
 
Ich glaub, dass das bei mir nich geht. Ich hab nur die Personal-Version von Delphi, und da gibt es das Tool TLibImp.exe anscheinend nicht, von dem EventSinkImp wird es aber benötigt. Das heißt, es klappt nicht. Könntest du mir bitte den von EventSinkImp erzeugten Quelltext geben?

shockrocker 29. Apr 2006 21:33

Re: iTunes-Track herausfinden
 
Zitat:

Zitat von jakobwenzel
Ich hab nur die Personal-Version von Delphi, und da gibt es das Tool TLibImp.exe anscheinend nicht, von dem EventSinkImp wird es aber benötigt.

ich habe delphi 5 std und da gibts das leider auch nicht - gibts sonst noch nen weg die events einfacher zu wrappen?

gruß
shockrocker

DaCoda 24. Okt 2006 21:05

Re: iTunes-Track herausfinden
 
Ich wüsste auch gerne, wie ich diese Events einbinde...
Alle meine Versuche waren atm. ohne Erfolg....
Hat nicht jemand einen Codeschnipsel ?????

CalganX 24. Okt 2006 21:34

Re: iTunes-Track herausfinden
 
Zitat:

Zitat von Chakotay1308
guck dir mal diesen Thread an. Mit dem verlinkten Tool (EventSinkImp) kannst du dir eine Unit erstellen, die alle Events so wrappt, dass du sie einfacher verwenden kannst.

Schreib ich hier süd-aramäisch? :gruebel:
In dem verlinkten Thread ist ein Code-Schnipsel + ein Tool gepostet worden. Damit funktioniert es im Normalfall. Und wenn es trotz Tool nicht funktionieren sollte, wäre ein Formulierung dementsprechend sinnvoll, anstatt zu sagen "geht nicht" ("geht trotz tool nicht" wäre ja schonmal ganz nützlich).

Chris

DaCoda 25. Okt 2006 15:42

Re: iTunes-Track herausfinden
 
Hallo Chakotay,
Zitat:

Schreib ich hier süd-aramäisch?
Nein, das tust du nicht... Aber ich habe genau dieses Tool und die dabei entstandene Unit getestet...
Und TROTZDEM kommen keine Events an !!!
Ich habe iTunes 7.0.1.8. Die Steuerung klappt einwandfrei, aber eben keine Events...
Und meine Frage war auch simpel, ich fragte ja nicht nach einem Codeschnipsel für Jabber :mrgreen: , sondern für iTunes...

Danke für deine Mühen, ich habe alle Threads hier gelesen und auch entsprechendes getestet, nur funzt es nicht, ich weiss atm. nicht wieso. Und ich programmiere seit über 10 Jahren Pascal/Delphi, von daher will ich mal sagen, das ich schon weiss, was ich gemacht habe. Leider muss ich gestehen COM ist momentan Neuland...

DaCoda 26. Okt 2006 09:13

Re: iTunes-Track herausfinden
 
So hier habe ich mein Testsource mal angehängt:
Delphi-Quellcode:
unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, iTunesLib_TLB, iTunesLibEvents, ExtCtrls, StdCtrls;

type
  TfrmMain = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure TrackChangedEvent(Sender: TObject; iTrack: OleVariant);
  private
    iTunesApp: IiTunes;
    EventManager: TiTunesLibIiTunesEvents;
  public
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  iTunesApp := COiTunesApp.Create;
  EventManager := TiTunesLibIiTunesEvents.Create(Self);
  EventManager.OnPlayerPlayingTrackChangedEvent := TrackChangedEvent;
  EventManager.Connect(iTunesApp);
end;

procedure TfrmMain.TrackChangedEvent(Sender: TObject; iTrack: OleVariant);
var
  Track: IITTrack;
begin
  Assert(VarType(iTrack) = varDispatch);
  Track := IDispatch(iTrack) as IITTrack;
  Label1.Caption := Track.Album;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  EventManager.Disconnect;
  FreeAndNil(EventManager);
//  iTunesApp.Quit;
  iTunesApp := nil;
end;

end.
Und das Event kommt nicht ????? Ich weiss wirklich nicht, was hier falsch sein sollte....

CalganX 26. Okt 2006 14:05

Re: iTunes-Track herausfinden
 
Hi,
da ich im Moment nur eine Turbo-Version hab, mit der ich keine Typbibliothek einbinden kann, müsste ich erstmal raten:
ich vermute mal, dass du erst connecten musst, um dann das Ereignis zuzuweisen...

Chris

DaCoda 27. Okt 2006 11:40

Re: iTunes-Track herausfinden
 
Hi,

erst Connect und dann das Ereignis initiieren habe ich auch schon gemacht...
Ich benutze ja auch Turbo-Delphi... Units kannst du ja einbinden und dann create() etc...

Naja ich brauche das ja nicht dringend, ist nur um mich in das Thema einzuarbeiten. Wollte ein kleines Tool, like MyFairTunes basteln, jedoch mit vielen kleinen Tools, wie z.B. alle Tracks ohne Artwork anzeigen etc....

Ich denke irgendwann finde ich einen weg für die Events...

Danke erst mal, würde mich freuen, wenn jemand einen guten Tip hat. Sollte ich vorher was finden, werde ich es hier Posten...

OldGrumpy 3. Apr 2007 09:06

Re: iTunes-Track herausfinden
 
Ahoi... sorry für die späte Antwort, aber ich hatte den Thread überhaupt nicht gesehen. Für die Akten: In der erwähnten iTunes-Version gehen Events gar nicht, muss wohl ein Bug gewesen sein. Das war aber nicht der einzige Bug :) Ich hab zu der Zeit an einem Projekt gearbeitet wo es unter anderem auch um die Interaktion mit iTunes ging - ich habe mir tagelang die Haare gerauft bis ich dann letzten Endes in langen Debuggingsessions rausgefunden hatte, dass iTunes 7.0.0.18 da gar keine Events sendet. Das war besonders übel weil ich einen Releasetermin zu halten hatte und an dem Problem gar nichts machen konnte. Inzwischen sollte das aber behoben sein, wenn ich mich recht entsinne erschien dann irgendwann ne neuere Version in der es wieder ging...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 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