Mini Kabibi Habibi

Current Path : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/ffc/
Upload File :
Current File : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/ffc/_multimedia.vct

j�VERSION =   3.00_videoplayergetmcierror^
PixelsClass2
_container_videoplayerE�� ,,5�%����Uf���(T���STATUS ���� MODE��#%�C�����stopped��_�
������UCCMDTHISPARENTMCIALIASDOMCI	PLAYVIDEOTimer,��1q�1�A1�),�PROCEDURE Timer
LOCAL cCmd
cCmd = ("STATUS " + THIS.PARENT.MCIalias + " MODE")
IF THIS.PARENT.doMCI(cCmd) = "stopped" THEN
	THIS.PARENT.playVideo
ENDIF
ENDPROC
FTop = 96
Left = 120
Height = 23
Width = 23
Name = "tmrCheckMode"
_videoplayertmrCheckModetimertimer�mcierror Specifies the result of the last MCI command executed.
mcierrorstring Stores the error string from the last MCI command executed.
autoopen Specifies whether the video file specified should be automatically opened when the class is created.
mcialias Specifies the alias for the video file when calling MCI commands.  If empty, the name of the file is used.
autoplay Specifies whether the video file should automatically play after opening.
autorepeat If .T., video will continuously play
controlsource Specifies the source of data to which an object is bound.
cfilename Specifies the video file associated with the Video Frame.
*domci Executes a MCI command.
*getmcierror Stores the last MCI error into properties of the class.
*openvideo Opens the video file and shows it.
*playvideo Plays the currently loaded video.
*pausevideo Pauses a currently playing video.
*showmcierror Displays the result of the last MCI command in a messagebox.
*closevideo Closes the video file and releases all resources.
*setposition Allows the user to set the position of the media file; Valid values are Start, End, or a number representing milliseconds.
&�� 

�%����U���������T��C�PX��T��C��C�>����T��C�����%�����r�	B�����B�CC�C� ��`��UCMCICMD
CRETSTRINGCERR	NRETVALUE
MCISENDSTRINGTHISGETMCIERROR��������
T�����%�C�cErrorb�C��n�%�C��=�*ERROR*��j�T��CC��\g����%�C�cErrorb�N����
T������T��C�X����C��C�>���T������T������B�CC�C� ��`��UCERRORNERRORCERRORSTRINGMCIGETERRORSTRINGTHISMCIERRORMCIERRORSTRINGp�������������	�
��T����
��%�C������T������%�C������>��C�2No filename specified or control source specified!�x��B����(cFileName = ALLTRIM(&cControlSource)
%�C������B���T������%�C����D�T������T�������T�9�����#T���STATUS �� READY��%�C����true����!T���CLOSE �� WAIT����C������Gb(�C�Q�.\FOXTOOLS.FLL�����MainHWND����	_WhToHwnd����_WOnTop�T���C���%�C�THISFORMb�O��U�T�������o�T��CC�����
T�����QT���OPEN "��" alias �� style child parent CC�Z�� WAIT����C�����%���������C���x��T�9�����B���/T���status �� window handle wait��T��CCC���g8��T������T�	�����T������T�
�����$��C����	��
����(T���WINDOW �� state show����C������5��C�SET �� time format milliseconds����%���a��Z�
�����T�9�����U CCONTROLSOURCE	CFILENAMECALIASCCMDHWIN	MAIN_HWND
CUR_WINDOWX1POSX2POSY1POSY2POSNULLPOINTERTHIS
CONTROLSOURCEMCIALIASNAMEMOUSEPOINTERDOMCIMAINHWND	_WHTOHWND_WONTOPHWNDTHISFORMMCIERRORMCIERRORSTRINGLEFTTOPWIDTHHEIGHTSETWINDOWPOSAUTOPLAY	PLAYVIDEO �����T������,T��CC�STATUS �� length��g��.T��CC�STATUS ��	 position��g��%�������+��C�SEEK �� to start WAIT�������C�PLAY �����%��������
�����%���a���T��	�
��d���UCALIASNMEDIALENGTHNMEDIAPOSITIONTHISMCIALIASDOMCIMCIERRORSHOWMCIERROR
AUTOREPEATTMRCHECKMODEINTERVAL����T������3%�C�STATUS �� mode���playing������C�PAUSE �����%��������
�����%���a����T���������U	CALIASTHISMCIALIASDOMCIMCIERRORSHOWMCIERROR
AUTOREPEATTMRCHECKMODEINTERVAL!��CC��Z�: ���x��UTHISMCIERRORMCIERRORSTRING����&T���STATUS ��� READY��%�C����true����$T���CLOSE ��� WAIT����C�����%��������
�����%���a����T���������U	CCMDTHISMCIALIASDOMCIMCIERRORSHOWMCIERROR
AUTOREPEATTMRCHECKMODEINTERVALz4��������T������(%�C�f�START�
C�f�END��f�T���to ������T��C�g��%�C������B����,T��CC�STATUS �� length��g��%���
����B����T���to C�Z�����#T���STATUS �� READY��%�C����true��s�T���SEEK �� �����C������U		CPOSITIONCALIASCPOSCMD	NPOSITIONNMEDIALENGTHTHISMCIALIASDOMCICCMD

����UTHIS
CLOSEVIDEO�T���-��*|�
mciSendString�	WinMM.DLL����,|�mciGetErrorString�	WINMM.DLL���+|�SetWindowPos�User32�������UTHISVISIBLE
MCISENDSTRINGWINMMDLLMCIGETERRORSTRINGSETWINDOWPOSUSER32#%���a���
�����UTHISAUTOOPEN	OPENVIDEO������
H���%������	openvideo	��m�,��C� Invalid controlSource specified.�x��2��
������UNERRORCMETHODNLINEdomci,��getmcierror��	openvideoW��	playvideo���
pausevideo�	��showmcierror�
��
closevideo�
��setposition��Destroy�
��Init��Refresh���Error<��1q���R�AR3q����AAA��AqR3�q���AA���AAA�A�3�A�����!A�C��A���C�BS"�A�3����A�A�A"1A2q3�A�A!1AA2�3qb�BA�A!1AA3q1�A���A��A�aAAA3��A2�2����3"�A3��Q���A2%���2X���g�6�sY��u�.��P��#2��MI��g����)
	containerClass	_base.vcx	containertimertimertmrCheckMode_soundplayerName = "tmrCheckMode"
2_soundplayergetmcierror^
Pixels
_container_soundplayerE�� ,,5�%����Uf���(T���STATUS ���� MODE��#%�C�����stopped��_�
������UCCMDTHISPARENTMCIALIASDOMCI	PLAYSOUNDTimer,��1q�1�A1�),�PROCEDURE Timer
LOCAL cCmd
cCmd = ("STATUS " + THIS.PARENT.MCIalias + " MODE")
IF THIS.PARENT.doMCI(cCmd) = "stopped" THEN
	THIS.PARENT.playSound
ENDIF
ENDPROC
amcierror Specifies the result of the last MCI command executed.
mcierrorstring Stores the error string from the last MCI command executed.
autoopen Specifies whether the sound file specified should be automatically opened when the class is created.
mcialias Specifies the alias for the video file when calling MCI commands.  If empty, the name of the file is used.
autoplay Specifies whether the sound file should automatically play after opening.
autorepeat If .T., sound will continuously play
controlsource Specifies the source of data to which an object is bound.
cfilename Sound file name to play.
*domci Executes a MCI command.
*getmcierror Stores the last MCI error into properties of the class.
*showmcierror Displays the result of the last MCI command in a messagebox.
*setposition Allows the user to set the position of the media file; Valid values are Start, End, or a number representing milliseconds.
*opensound Opens the sound file.
*pausesound Pauses the currently playing sound.
*playsound Plays the loaded sound file.
*closesound Closes the loaded sound file and releases it's resources.
R�� 99��%8
@��U���������T��C�PX��T��C��C�>����T��C�����%�����r�	B�����B�CC�C� ��`��UCMCICMD
CRETSTRING	NRETVALUECERR
MCISENDSTRINGTHISGETMCIERROR��������
T�����%�C�cErrorb�C��n�%�C��=�*ERROR*��j�T��CC��\g����%�C�cErrorb�N����
T������T��C�X����C��C�>���T������T������B�CC�C� ��`��UCERRORNERRORCERRORSTRINGMCIGETERRORSTRINGTHISMCIERRORMCIERRORSTRING!��CC��Z�: ���x��UTHISMCIERRORMCIERRORSTRING~4���������T������(%�C�f�START�
C�f�END��j�T���to �����T��C�g��%�C������B����,T��CC�STATUS �� length��g��%���
����B����T���to C�Z�����#T���STATUS �� READY��%�C����true��w�T���SEEK �� �����C������U		CPOSITIONCALIAS	NPOSITIONCPOSCMDNMEDIALENGTHCCMDTHISMCIALIASDOMCIq�����%�C�����|�T������%�C����x�4��C�(No filename or control source specified!�x��B�����'cFileName = ALLTRIM(&controlSource)
%�C������B���T������%�C�����T������T�������T�9�����#T���STATUS �� READY��%�C����true����!T���CLOSE �� WAIT����C������1T���OPEN "��" alias �� WAIT����C�����%���	������C��
�x��T�9�����B��5��C�SET �� time format milliseconds����%���a��[�
�����T�9�����U
	CFILENAMECALIASCCMDTHIS
CONTROLSOURCEMCIALIASNAMEMOUSEPOINTERDOMCIMCIERRORMCIERRORSTRINGAUTOPLAY	PLAYSOUND����T������3%�C�STATUS �� mode���playing������C�PAUSE �����%��������
�����%���a����T���������U	CALIASTHISMCIALIASDOMCIMCIERRORSHOWMCIERROR
AUTOREPEATTMRCHECKMODEINTERVAL!�����T������,T��CC�STATUS �� length��g��.T��CC�STATUS ��	 position��g��%�������+��C�SEEK �� to start WAIT�������C�PLAY �����%��������
�����%���a���T��	�
��,���UCALIASNMEDIALENGTHNMEDIAPOSITIONTHISMCIALIASDOMCIMCIERRORSHOWMCIERROR
AUTOREPEATTMRCHECKMODEINTERVAL����&T���STATUS ��� READY��%�C����true����$T���CLOSE ��� WAIT����C�����%��������
�����%���a����T���������U	CCMDTHISMCIALIASDOMCIMCIERRORSHOWMCIERROR
AUTOREPEATTMRCHECKMODEINTERVAL������
H���%������	opensound	��m�,��C� Invalid controlSource specified.�x��2��
������UNERRORCMETHODNLINE#%���a���
�����UTHISAUTOOPEN	OPENSOUND�T���-��*|�
mciSendString�	WinMM.DLL����,|�mciGetErrorString�	WINMM.DLL���+|�SetWindowPos�User32�������UTHISVISIBLE
MCISENDSTRINGWINMMDLLMCIGETERRORSTRINGSETWINDOWPOSUSER32

����UTHIS
CLOSESOUNDdomci,��getmcierror��showmcierrorW��setposition���	opensoundp��
pausesoundg��	playsound|��
closesound
��ErrorH��Refresh���Init,��Destroy
��1q���R�AR3q����AAA��AqR3�3qr�A���A��A�aAAA3��A2�#�AAA�q�AAA�A�3�AC��AAS"�A�3q3�A�A!1AA2����A�A�A"AA2ra�BA�A!1AA3��Q���A3!�A3����3�1$���1�56��T[�O�go/�vP��������#��>9��Wf�)9qPROCEDURE domci
LPARAMETERS cMCIcmd
LOCAL cRetString,nRetValue,cErr 
*!* This method takes a MCI command string and executes it using
*!* the Windows API function mciSendString

*!* If the function executes successfully, the result is returned.
*!* Otherwise, the error string is returned.
cRetString = space(80)
nRetValue = mciSendString(cMCIcmd,@cRetString,len(cRetString),0)

cErr = THIS.getMCIerror(nRetValue)
IF nRetValue > 0
	RETURN CeRR
ENDIF
   
RETURN TRIM(STRTRAN(cRetString,chr(0),""))

ENDPROC
PROCEDURE getmcierror
LPARAMETERS cError
LOCAL nError,cErrorString

*!* This method is called from the doMCI to retrieve the last
*!* MCI error string.
*!* This function also saves the last error number and string
*!* into properties associated with the form.

nError=0
IF TYPE("cError")="C"
   IF LEFT(cError,7)="*ERROR*"
      nError=val(substr(cError,8))
   ENDIF
ENDIF   

IF TYPE("cError")="N"
  nError=cError
ENDIF

cErrorString=SPACE(256)  
=mciGetErrorString(nError,@cErrorString,len(cErrorString))

THIS.MCIerror = nError
THIS.MCIerrorString = cErrorString

RETURN TRIM(CHRTRAN(cErrorString,CHR(0),""))

ENDPROC
PROCEDURE showmcierror
MESSAGEBOX(STR(THIS.MCIerror) + ": " + THIS.MCIerrorString)

ENDPROC
PROCEDURE setposition
PARAMETERS cPosition

LOCAL cAlias,nPosition,cPosCmd,nMediaLength,cCmd   
cAlias = THIS.MCIalias

IF UPPER(cPosition) = "START" or UPPER(cPosition) = "END" THEN
	cPosCmd = "to " + cPosition
ELSE
	nPosition = VAL(cPosition)
	IF EMPTY(nPosition) THEN
		RETURN
	ELSE
		*!* Check to make sure position is not greater than the length
		
		nMediaLength = VAL(THIS.doMCI("STATUS " + cAlias + " length"))
		IF nMediaLength < nPosition THEN
			RETURN
		ELSE
			cPosCmd = "to " + STR(nPosition)
		ENDIF
	ENDIF
ENDIF

*!* Make sure video is loaded
cCmd = ("STATUS " + cAlias + " READY")
IF THIS.doMCI(cCmd) = "true" THEN
	cCmd = "SEEK " + cAlias + " " + cPosCmd
	THIS.doMCI(cCmd)
ENDIF
ENDPROC
PROCEDURE opensound
#DEFINE C_NOFILENAME_LOC "No filename or control source specified!"

LOCAL cFileName,cAlias,cCmd

*!* Get needed properties into variables
IF EMPTY(THIS.controlSource) THEN
	cFileName = THIS.cFileName
	IF EMPTY(cFileName) THEN
		MESSAGEBOX(C_NOFILENAME_LOC)
		RETURN
	ENDIF
ELSE
	cFileName = ALLTRIM(&controlSource)
	IF EMPTY(cFileName) THEN
		RETURN
	ENDIF
ENDIF
	
cAlias = THIS.MCIalias
IF EMPTY(cAlias) THEN
	cAlias = THIS.name
	THIS.MCIalias = cAlias
ENDIF

_SCREEN.MousePointer = 11

*!* If sound is already loaded, then close it
cCmd = ("STATUS " + cAlias + " READY")
IF THIS.doMCI(cCmd) = "true" THEN
	*!* If one is, close it
	cCMD = ("CLOSE " + cAlias + " WAIT")
	THIS.doMCI(cCmd)
ENDIF

*!* Set up open MCI command into string variable
cCmd = ('OPEN "' + cFileName + '" alias ' + cAlias + ' WAIT')

THIS.doMCI(cCmd)

*!* Check to see if MCI command succeeded
IF THIS.MCIerror > 0 THEN
	messagebox(THIS.MCIerrorString)
	_SCREEN.MousePointer = 0
	RETURN
ENDIF

*!* Set the device to use milliseconds when setting/getting position
THIS.doMCI("SET " + cAlias + " time format milliseconds")

IF THIS.autoPlay = .T. THEN
	THIS.playSound
ENDIF

_SCREEN.MousePointer = 0

ENDPROC
PROCEDURE pausesound
LOCAL cAlias
cAlias = THIS.MCIalias

*!* Check to see if there is media acutally playing
IF THIS.doMCI("STATUS " + cAlias + " mode") = "playing" THEN
	*!* Yes there is, so execute the PAUSE MCI command
	THIS.doMCI("PAUSE " + cAlias)
	IF THIS.MCIerror > 0 THEN
		THIS.showMCIerror
	ENDIF
	IF THIS.autoRepeat = .T. THEN
		THIS.tmrCheckMode.INTERVAL = 0
	ENDIF
ENDIF
ENDPROC
PROCEDURE playsound
LOCAL cAlias,nMediaLength,nMediaPosition  
cAlias = THIS.MCIalias

*!* First need to see if the media is at the end 
*!* by comparing the total length with the current position
nMediaLength = VAL(THIS.doMCI("STATUS " + cAlias + " length"))
nMediaPosition = VAL(THIS.doMCI("STATUS " + cAlias + " position"))

IF nMediaPosition >= nMediaLength THEN
	*!* The media is at the end, so we need to seek back to the start
	*!* of the clip before playing
	THIS.doMCI("SEEK " + cAlias + " to start WAIT")
ENDIF

*!* Now we can play the media
THIS.doMCI("PLAY " + cAlias)
IF THIS.MCIerror > 0 THEN
	THIS.showMCIerror
ENDIF

IF THIS.autoRepeat = .T. THEN
	THIS.tmrCheckMode.INTERVAL = 300
ENDIF
ENDPROC
PROCEDURE closesound
*!* If sound is not already closed, then close it
LOCAL cCmd
cCmd = ("STATUS " + THIS.MCIalias + " READY")
IF THIS.doMCI(cCmd) = "true" THEN
	*!* If one is, close it
	cCMD = ("CLOSE " + THIS.MCIalias + " WAIT")
	THIS.doMCI(cCmd)
	IF THIS.MCIerror > 0 THEN
		THIS.showMCIerror
	ENDIF
	IF THIS.autoRepeat = .T. THEN
		THIS.tmrCheckMode.INTERVAL = 0
	ENDIF
ENDIF

ENDPROC
PROCEDURE Error
#DEFINE INVALID_CONTROLSOURCE_LOC "Invalid controlSource specified."
LPARAMETERS nError, cMethod, nLine

DO CASE
	CASE nError=12 AND cMethod="opensound"
		messageBox(INVALID_CONTROLSOURCE_LOC)
	OTHERWISE
		ERROR (nError)
ENDCASE

ENDPROC
PROCEDURE Refresh
IF THIS.autoOpen = .T. THEN
	THIS.openSound
ENDIF

ENDPROC
PROCEDURE Init
THIS.Visible = .F.

*!* This is the primary Windows API function that is used to 
*!* send MCI commands
DECLARE INTEGER mciSendString ;
   IN WinMM.DLL ;
   STRING cMCIString,;
   STRING @cRetString,;
   INTEGER nRetLength,;
   INTEGER hInstance

*!* This function allows us to retrieve the last MCI error that occured
DECLARE INTEGER mciGetErrorString ;
   IN WINMM.DLL ;
   INTEGER nErrorno, ;
   STRING @cBuffer, ;
   INTEGER nBufSize
   
*!* When MCI plays a video, it creates its own Window.  By using
*!* this Windows API function we can position this Window to be
*!* in the same position as our Player rectangle on the form
DECLARE integer SetWindowPos ;
	IN User32 ;
	integer, integer, integer, integer, integer, integer, integer

ENDPROC
PROCEDURE Destroy
THIS.closeSound
ENDPROC
�Width = 33
Height = 36
BorderWidth = 0
Visible = .F.
BackColor = 0,128,255
mcierror = 0
mcierrorstring = 
autoopen = .T.
mcialias = 
autoplay = .T.
autorepeat = .T.
controlsource = 
cfilename = 
Name = "_soundplayer"
�PROCEDURE domci
LPARAMETERS cMCIcmd
LOCAL cRetString,cErr,nRetValue

*!* This method takes a MCI command string and executes it using
*!* the Windows API function mciSendString

*!* If the function executes successfully, the result is returned.
*!* Otherwise, the error string is returned.
cRetString = space(80)
nRetValue = mciSendString(cMCIcmd,@cRetString,len(cRetString),0)

cErr = THIS.getMCIerror(nRetValue)
IF nRetValue > 0
	RETURN CeRR
ENDIF
   
RETURN TRIM(STRTRAN(cRetString,chr(0),""))

ENDPROC
PROCEDURE getmcierror
LPARAMETERS cError
LOCAL nError,cErrorString

*!* This method is called from the doMCI to retrieve the last
*!* MCI error string.
*!* This function also saves the last error number and string
*!* into properties associated with the form.

nError=0
IF TYPE("cError")="C"
   IF LEFT(cError,7)="*ERROR*"
      nError=val(substr(cError,8))
   ENDIF
ENDIF   

IF TYPE("cError")="N"
  nError=cError
ENDIF

cErrorString=SPACE(256)  
=mciGetErrorString(nError,@cErrorString,len(cErrorString))

THIS.MCIerror = nError
THIS.MCIerrorString = cErrorString

RETURN TRIM(CHRTRAN(cErrorString,CHR(0),""))

ENDPROC
PROCEDURE openvideo
#DEFINE C_NOFILENAME_LOC "No filename specified or control source specified!"
LOCAL cControlSource,cFileName,cAlias,cCmd,hWin,Main_hWnd,cur_window 
LOCAL x1Pos,x2Pos,y1Pos,y2Pos,NullPointer     
*!* Get needed properties into variables
cControlSource = THIS.controlSource
IF EMPTY(cControlSource) THEN
	cFileName = THIS.cFileName
	IF EMPTY(cFileName) THEN
		MESSAGEBOX(C_NOFILENAME_LOC)
		RETURN
	ENDIF
ELSE
	cFileName = ALLTRIM(&cControlSource)
	IF EMPTY(cFileName) THEN
		RETURN
	ENDIF
ENDIF

	
cAlias = THIS.MCIalias
IF EMPTY(cAlias) THEN
	cAlias = THIS.name
	THIS.MCIalias = cAlias
ENDIF

_SCREEN.MousePointer = 11

*!* If video is already loaded, then close it
cCmd = ("STATUS " + cAlias + " READY")
IF THIS.doMCI(cCmd) = "true" THEN
	*!* If one is, close it
	cCMD = ("CLOSE " + cAlias + " WAIT")
	THIS.doMCI(cCmd)
ENDIF

*!* Need to use window handle functions in FoxTools
SET LIBRARY TO HOME() + ".\FOXTOOLS.FLL"
EXTERNAL PROCEDURE MainHWND
EXTERNAL PROCEDURE _WhToHwnd
EXTERNAL PROCEDURE _WOnTop

* Returns Handle of Main VFP Window
* Main_hWnd = MainHWND()	
Main_hWnd = _VFP.hWnd

* Get Handle of the form with FOXTOOLS.FLL
IF TYPE("THISFORM")="O"
	cur_window = THISFORM.HWnd
ELSE
	cur_window = _WhToHwnd(_WonTop())
ENDIF

NullPointer = 0

*!* Set up open MCI command into string variable
cCmd = ('OPEN "' + cFileName + '" alias ' + cAlias + ;
  ' style child parent ' + ALLTRIM(STR(cur_window)) + ' WAIT')

THIS.doMCI(cCmd)

*!* Check to see if MCI command succeeded
IF THIS.MCIerror > 0 THEN
	messagebox(THIS.MCIerrorString)
	_SCREEN.MousePointer = 0
	RETURN
ELSE
	*!* It does have visual media, so we need to set up the window
	*!* it will play in.
	
	*!* Get the window handle of the window playing the video
	cCmd = "status " + cAlias + " window handle wait"
	hWin = INT(VAL(THIS.doMCI(cCmd)))

	*!* Once we have the window handle, we need to position
	*!* the video window to be the same position and size
	*!* as our player rectangle on the form
	x1Pos = THIS.LEFT
	y1Pos = THIS.TOP
	x2Pos = THIS.WIDTH
	y2Pos = THIS.HEIGHT

	*!* Use the SetWindowPos Windows function to set position and size
	setWindowPos(hWin,0,x1Pos,y1Pos,x2Pos,y2Pos,0)

	*!* Everything's done, let's show the video
	cCmd = ("WINDOW " + cAlias + " state show")
	THIS.doMCI(cCmd)

ENDIF

*!* Set the device to use milliseconds when setting/getting position
THIS.doMCI("SET " + cAlias + " time format milliseconds")

IF THIS.autoPlay = .T. THEN
	THIS.playVideo
ENDIF

_SCREEN.MousePointer = 0

ENDPROC
PROCEDURE playvideo
LOCAL cAlias,nMediaLength,nMediaPosition  
cAlias = THIS.MCIalias

*!* First need to see if the media is at the end 
*!* by comparing the total length with the current position
nMediaLength = VAL(THIS.doMCI("STATUS " + cAlias + " length"))
nMediaPosition = VAL(THIS.doMCI("STATUS " + cAlias + " position"))

IF nMediaPosition >= nMediaLength THEN
	*!* The media is at the end, so we need to seek back to the start
	*!* of the clip before playing
	THIS.doMCI("SEEK " + cAlias + " to start WAIT")
ENDIF

*!* Now we can play the media
THIS.doMCI("PLAY " + cAlias)
IF THIS.MCIerror > 0 THEN
	THIS.showMCIerror
ENDIF

IF THIS.autoRepeat = .T. THEN
	THIS.tmrCheckMode.INTERVAL = 100
ENDIF
ENDPROC
PROCEDURE pausevideo
LOCAL cAlias
cAlias = THIS.MCIalias

*!* Check to see if there is media acutally playing
IF THIS.doMCI("STATUS " + cAlias + " mode") = "playing" THEN
	*!* Yes there is, so execute the PAUSE MCI command
	THIS.doMCI("PAUSE " + cAlias)
	IF THIS.MCIerror > 0 THEN
		THIS.showMCIerror
	ENDIF
	IF THIS.autoRepeat = .T. THEN
		THIS.tmrCheckMode.INTERVAL = 0
	ENDIF
ENDIF
ENDPROC
PROCEDURE showmcierror
MESSAGEBOX(STR(THIS.MCIerror) + ": " + THIS.MCIerrorString)

ENDPROC
PROCEDURE closevideo
LOCAL cCmd 
*!* If video is not already closed, then close it
cCmd = ("STATUS " + THIS.MCIalias + " READY")
IF THIS.doMCI(cCmd) = "true" THEN
	*!* If one is, close it
	cCMD = ("CLOSE " + THIS.MCIalias + " WAIT")
	THIS.doMCI(cCmd)
	IF THIS.MCIerror > 0 THEN
		THIS.showMCIerror
	ENDIF
	IF THIS.autoRepeat = .T. THEN
		THIS.tmrCheckMode.INTERVAL = 0
	ENDIF
ENDIF

ENDPROC
PROCEDURE setposition
PARAMETERS cPosition
LOCAL cAlias,cPosCmd,nPosition,nMediaLength 
cAlias = THIS.MCIalias

IF UPPER(cPosition) = "START" or UPPER(cPosition) = "END" THEN
	cPosCmd = "to " + cPosition
ELSE
	nPosition = VAL(cPosition)
	IF EMPTY(nPosition) THEN
		RETURN
	ELSE
		*!* Check to make sure position is not greater than the length
		
		nMediaLength = VAL(THIS.doMCI("STATUS " + cAlias + " length"))
		IF nMediaLength < nPosition THEN
			RETURN
		ELSE
			cPosCmd = "to " + STR(nPosition)
		ENDIF
	ENDIF
ENDIF

*!* Make sure video is loaded
cCmd = ("STATUS " + cAlias + " READY")
IF THIS.doMCI(cCmd) = "true" THEN
	cCmd = "SEEK " + cAlias + " " + cPosCmd
	THIS.doMCI(cCmd)
ENDIF
ENDPROC
PROCEDURE Destroy
THIS.closeVideo
ENDPROC
PROCEDURE Init
THIS.Visible = .F. 

*!* This is the primary Windows API function that is used to 
*!* send MCI commands
DECLARE INTEGER mciSendString ;
   IN WinMM.DLL ;
   STRING cMCIString,;
   STRING @cRetString,;
   INTEGER nRetLength,;
   INTEGER hInstance

*!* This function allows us to retrieve the last MCI error that occured
DECLARE INTEGER mciGetErrorString ;
   IN WINMM.DLL ;
   INTEGER nErrorno, ;
   STRING @cBuffer, ;
   INTEGER nBufSize
   
*!* When MCI plays a video, it creates its own Window.  By using
*!* this Windows API function we can position this Window to be
*!* in the same position as our Player rectangle on the form
DECLARE integer SetWindowPos ;
	IN User32 ;
	integer, integer, integer, integer, integer, integer, integer

ENDPROC
PROCEDURE Refresh

IF THIS.autoOpen = .T. THEN
	THIS.openVideo
ENDIF

ENDPROC
PROCEDURE Error
#DEFINE INVALID_CONTROLSOURCE_LOC "Invalid controlSource specified."

LPARAMETERS nError, cMethod, nLine

DO CASE
	CASE nError = 12 and cMethod = "openvideo"
		messageBox(INVALID_CONTROLSOURCE_LOC)
	OTHERWISE
		ERROR (nError)
ENDCASE

ENDPROC
�Width = 201
Height = 133
BorderWidth = 0
Visible = .F.
BackColor = 0,128,192
mcierror = 0
mcierrorstring = 
autoopen = .T.
mcialias = 
autoplay = .T.
autorepeat = .T.
controlsource = 
cfilename = 
Name = "_videoplayer"
	_base.vcx