例:已有123.avi,那么如何在这个avi文件头中,插入一个特殊的标志,当使用midiaplay播放时,首先判断这个标志是否存在,如果存在的话,则从这个标志后面读入,并播放avi,前提是不生成临时文件?
希望那位能帮帮我,真的很急.谢谢,分不够可以再给.
希望那位能帮帮我,真的很急.谢谢,分不够可以再给.
解决方案 »
- 做个TClientDataSet调查!希望大家参与。
- 欢迎加群(2006年6月新建),加满为止!
- 统计一个月中每种产品的入库数目。。。。
- 如何调用摄像头的图形和图象呢?
- 救命阿 怎样动态创建 clientsocket和serversocket组件
- 方向键的ASCII码分别是多少?谢谢
- Invalid Variant type Conversion--在线
- delphi如何实现比较?
- 小弟想加密自己的东西谁有加密的代码例子吗?多谢了。
- 用Delphi做 Photo Shop中的那种工具栏,不使用第三方控件,谁会?
- 百分求救!如何实现这样的功能?急分不够再加!!!
- 在TDBGrid中,获取得当前用户用选中的行号和列号,用哪个属性,我找不到???
Windows, Messages, SysUtils, Classes, Graphics, Controls, CommCtrl;Type
TAVIControlState = (acsClose, acsOpen, acsPlay);
TAVIControlError = (acrOK, acrOpenFailed, acrPlayFailed, acsSeekFailed); TAVIControl = class(TWinControl)
private
FAVIState: TAVIControlState;
FAVIName: String;
FFrameFrom: SmallInt;
FFrameTo: SmallInt;
FFrameSeek: SmallInt;
FAutoSize: Boolean;
FAutoRepeat: Boolean;
FLastOpStatus: TAVIControlError;
FAux: String;
Procedure SetAVIState(Val: TAVIControlState);
Procedure SetAVIName(Val: String);
Procedure SetFrameFrom(Val: SmallInt);
Procedure SetFrameTo(Val: SmallInt);
Procedure SetFrameSeek(Val: SmallInt);
Procedure SetAutoSize(Val: Boolean);
Procedure SetAutoRepeat(Val: Boolean);
Function GetLastOpStatus: String;
protected
procedure CreateParams(var Params: TCreateParams); Override;
procedure CreateWnd; Override;
public
Constructor Create(AOwner: TComponent); override;
Destructor Destroy; override;
Function Open(FileName: String): Boolean;
Procedure Close;
Function Play(FName: String; RepCount: SmallInt): Boolean;
Function Seek(Frame: SmallInt): Boolean;
Procedure Stop;
published
Property AVIState: TAVIControlState Read FAVIState Write SetAVIState Default acsClose;
Property AVIName: String Read FAVIName Write SetAVIName;
Property FrameFrom: SmallInt Read FFrameFrom Write SetFrameFrom Default 0;
Property FrameTo: SmallInt Read FFrameTo Write SetFrameTo Default -1;
Property FrameSeek: SmallInt Read FFrameSeek Write SetFrameSeek Default 0;
Property AutoSize: Boolean Read FAutoSize Write SetAutoSize Default False;
Property AutoRepeat: Boolean Read FAutoRepeat Write SetAutoRepeat Default True;
Property ZStatus: String Read GetLastOpStatus Write FAux;
property Align;
property Enabled;
property PopupMenu;
property ShowHint;
property Visible;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
end;procedure Register;implementationConstructor TAVIControl.Create(AOwner: TComponent);
Begin
inherited Create(AOwner);
ControlStyle := ControlStyle -[csSetCaption];
FAVIState := acsClose;
FFrameFrom := 0;
FFrameTo := -1;
FAutoSize := False;
FAutoRepeat := True;
FLastOpStatus := acrOK;
Width := 30;
Height := 30;
End;Destructor TAVIControl.Destroy;
Begin
Inherited Destroy;
End;procedure TAVIControl.CreateParams(var Params: TCreateParams);
begin
{ACS_AUTOPLAY - Starts playing the animation as soon as the animation clip is opened.
ACS_CENTER - Centers the animation in the animation control's window.
ACS_TRANSPARENT - Draws the animation using a transparent background rather than
the background color specified in the animation clip.}
InitCommonControls;
Inherited CreateParams(Params);
CreateSubClass(Params, 'SysAnimate32');
With Params do
Begin
Style := Style Or ACS_TRANSPARENT;
If Not FAutoSize Then Style := Style Or ACS_CENTER;
End;
end;procedure TAVIControl.CreateWnd;
begin
Inherited CreateWnd;
If FAVIState = acsOpen Then Open(FAVIName);
If FAVIState = acsPlay Then
Begin
Open(FAVIName);
Play('', 0);
End;
end;Procedure TAVIControl.SetAVIState(Val: TAVIControlState);
Begin
If Val <> FAVIState Then
Begin
FAVIState := Val;
Case FAVIState Of
acsOpen : Begin
Open(FAVIName)
End;
acsPlay : Begin
Open(FAVIName);
Play('', 0);
End;
acsClose: Close;
End;
End;
End;Procedure TAVIControl.SetAVIName(Val: String);
Var
FTmpState: TAVIControlState;
Begin
If Val <> FAVIName Then
Begin
FAVIName := Val;
FTmpState := FAVIState;
Close;
If FTmpState = acsOpen Then Open(FAVIName);
If FTmpState = acsPlay Then Play('', 0);
End;
End;Procedure TAVIControl.SetFrameFrom(Val: SmallInt);
Begin
If Val <> FFrameFrom Then
Begin
FFrameFrom := Val;
If FAVIState = acsPlay Then Play('', 0);
End;
End;Procedure TAVIControl.SetFrameTo(Val: SmallInt);
Begin
If Val <> FFrameTo Then
Begin
FFrameTo := Val;
If FAVIState = acsPlay Then Play('', 0);
End;
End;Procedure TAVIControl.SetFrameSeek(Val: SmallInt);
Begin
If Val <> FFrameSeek Then
Begin
FFrameSeek := Val;
Seek(FrameSeek);
End;
End;Procedure TAVIControl.SetAutoSize(Val: Boolean);
Begin
If Val <> FAutoSize Then
Begin
FAutoSize := Val;
RecreateWnd;
End;
End;Procedure TAVIControl.SetAutoRepeat(Val: Boolean);
Begin
If Val <> FAutoRepeat Then
Begin
FAutoRepeat := Val;
If FAVIState = acsPlay Then Play('', 0);
End;
End;Function TAVIControl.GetLastOpStatus: String;
Begin
Case FLastOpStatus Of
acrOK : Result := 'OK';
acrOpenFailed: Result := 'Open Failed';
acrPlayFailed: Result := 'Play Failed';
End;
End;Function TAVIControl.Open(FileName: String): Boolean;
Var
Res: LongInt;
Begin
FLastOpStatus := acrOK;
If FAVIState <> acsClose Then Close;
Res := SendMessage(Handle, ACM_OPEN, 0, LongInt(PChar(FileName)));
FAVIName := FileName;
If Res <> 0 Then FAVIState := acsOpen
Else FLastOpStatus := acrOpenFailed;
Result := (Res <> 0);
End;Procedure TAVIControl.Close;
Var
Res: LongInt;
Begin
FLastOpStatus := acrOK;
Res := SendMessage(Handle, ACM_OPEN, 0, 0);
FAVIState := acsClose;
Repaint;
End;Function TAVIControl.Seek(Frame: SmallInt): Boolean;
Var
Res: LongInt;
Begin
FLastOpStatus := acrOK;
If FAVIState = acsClose Then Open(FAVIName)
Else If FAVIState = acsPlay Then Stop;
If FAVIState <> acsClose Then
Begin
Res := SendMessage(Handle, ACM_PLAY, 1, MAKELONG(Frame, Frame));
If Res = 0 Then FLastOpStatus := acsSeekFailed;
Result := (Res <> 0);
End
Else Result := False;
End;Function TAVIControl.Play(FName: String; RepCount: SmallInt): Boolean;
Var
Res: LongInt;
Rep: SmallInt;
Begin
FLastOpStatus := acrOK;
If FName = '' Then Open(FAVIName)
Else Open(FName);
If FAVIState <> acsClose Then
Begin
If FAutoRepeat And (RepCount = 0) Then Rep := -1
Else If RepCount = 0 Then Rep := 1
Else Rep := RepCount;
Res := SendMessage(Handle, ACM_PLAY, Rep, MAKELONG(FFrameFrom, FFrameTo));
If (Res <> 0) And FAutoRepeat Then FAVIState := acsPlay
Else FLastOpStatus := acrPlayFailed;
Result := (Res <> 0);
End
Else Result := False;
End;Procedure TAVIControl.Stop;
Var
Res: LongInt;
Begin
FLastOpStatus := acrOK;
If FAVIState <> acsClose Then
Begin
Res := SendMessage(Handle, ACM_PLAY, 0, MAKELONG(0, 0));
If FAVIState = acsPlay Then FAVIState := acsOpen;
End;
End;procedure Register;
begin
RegisterComponents('MyGold', [TAVIControl]);
end;end.