{LightAlloy player} unit pl_la; {$include compilers.inc} interface implementation uses windows,messages,common,srv_player,wat_api; const LAClass = 'LightAlloyFront'; const WM_LACMD = WM_APP + 2504; LAC_VERSION = 000; LAC_FILE_OPEN = 050; LAC_PLAYBACK_STOP = 100; LAC_PLAYBACK_PLAY = 101; LAC_PLAYBACK_STOP_PLAY = 102; LAC_PLAYLIST_NEXT = 250; LAC_PLAYLIST_PREV = 251; LAC_PLAYLIST_PLAY = 252; LAC_SOUND_VOLUME_INC = 401; LAC_SOUND_VOLUME_DEC = 402; function Check(wnd:HWND;flags:integer):HWND;cdecl; begin if wnd<>0 then begin result:=0; exit; end; result:=FindWindow(LAClass,NIL); end; function GetVersion(wnd:HWND):integer; begin result:=SendMessage(wnd,WM_LACMD,LAC_VERSION,0) end; function Play(wnd:HWND;fname:PWideChar=nil):integer; var cds:COPYDATASTRUCT; begin if (fname<>nil) and (fname^<>#0) then begin cds.dwData:=LAC_FILE_OPEN; WideToAnsi(fname,PAnsiChar(cds.lpData)); cds.cbData:=StrLen(PAnsiChar(cds.lpData))+1; SendMessage(wnd,WM_COPYDATA,0,lparam(@cds)); mFreeMem(cds.lpData); end; result:=SendMessage(wnd,WM_LACMD,LAC_PLAYLIST_PLAY,0) // LAC_PLAYLIST_PLAY end; function Pause(wnd:HWND):integer; begin result:=SendMessage(wnd,WM_LACMD,LAC_PLAYBACK_STOP_PLAY,0) end; function Stop(wnd:HWND):integer; begin result:=SendMessage(wnd,WM_LACMD,LAC_PLAYBACK_STOP,0) end; function Next(wnd:HWND):integer; begin result:=SendMessage(wnd,WM_LACMD,LAC_PLAYLIST_NEXT,0) end; function Prev(wnd:HWND):integer; begin result:=SendMessage(wnd,WM_LACMD,LAC_PLAYLIST_PREV,0) end; function VolDn(wnd:HWND):integer; begin result:=SendMessage(wnd,WM_LACMD,LAC_SOUND_VOLUME_DEC,0); end; function VolUp(wnd:HWND):integer; begin result:=SendMessage(wnd,WM_LACMD,LAC_SOUND_VOLUME_INC,0); end; function GetInfo(var SongInfo:tSongInfo;flags:integer):integer;cdecl; begin result:=0; if (flags and WAT_OPT_PLAYERDATA)<>0 then begin if SongInfo.plyver=0 then begin SongInfo.plyver:=GetVersion(SongInfo.plwnd); end; end; end; function Command(wnd:HWND;cmd:integer;value:int_ptr):integer;cdecl; begin case cmd of WAT_CTRL_PREV : result:=Prev (wnd); WAT_CTRL_PLAY : result:=Play (wnd,pWideChar(value)); WAT_CTRL_PAUSE: result:=Pause(wnd); WAT_CTRL_STOP : result:=Stop (wnd); WAT_CTRL_NEXT : result:=Next (wnd); WAT_CTRL_VOLDN: result:=VolDn(wnd); WAT_CTRL_VOLUP: result:=VolUp(wnd); else result:=0; end; end; const plRec:tPlayerCell=( Desc :'LightAlloy'; flags :WAT_OPT_HASURL; Icon :0; Init :nil; DeInit :nil; Check :@Check; GetStatus:nil; GetName :nil; GetInfo :@GetInfo; Command :@Command; URL :'http://www.softella.com/'; Notes :nil); var LocalPlayerLink:twPlayer; procedure InitLink; begin LocalPlayerLink.Next:=PlayerLink; LocalPlayerLink.This:=@plRec; PlayerLink :=@LocalPlayerLink; end; initialization // ServicePlayer(WAT_ACT_REGISTER,dword(@plRec)); InitLink; end.