有一个小问题!请高手们指点一下。谢谢了!(100分)

  • 主题发起人 主题发起人 cjm
  • 开始时间 开始时间
C

cjm

Unregistered / Unconfirmed
GUEST, unregistred user!
在我的flash播放程序中,我使用了一个Timer控件来控制滑块的移动,
因为Flash(ShockwareFlash控件)中没有Position的属性,于是用上了FrameNum和TotalFrames.
Timer的internal设为1000,Timer控件中有这样一个语句:
flashtrackbar.Min:=0;
flashtrackbar.Max:=flash.TotalFrames;
flashtrackbar.Position:=flash.FrameNum;
这样可以实现随着播放,trackbar显示进度。

但我想实现拖动滑块快速浏览Flash文件时,在FlashTrackBarChange过程,在其中加入了:
flash.stop;
flash.FrameNum:=flashtrackbar.Position;
flash.Play;

当我执行程序时,图像总是断续,受到Timer的internal的影响,与Flash数据的操作不同步,
我的问题是:怎样使它们同步呢,使trackbar即可以随播放时间移动又可以根据用户的调整
位置播放?
 
其实你说的现象很多软件都有这个问题,如果不预先处理数据,那么临时读取定位肯定会出现停顿。
所以除非你先将整个Flash读入一段缓存。
 
用标准的Trackbar不是很合适,因为它没有OnMouseUp,OnMouseDown和OnMouseMove事件.
最好自己做一个,在MouseDown时停止播放并关掉定时器,在MouseMove时如果左键按下则
flash.framenum:=xx,在MouseUp时恢复原来的状态.
如需要这中TrackBar,留下mail
 
有的话,给我一个看看。谢谢了!
Ch_jm@263.net
Ch_jm@sohu.com
 
要用带有MOUSEUP 和MOUSEDOWN 属性的TRACKBAR 就行了
 
unit LCTrackBar;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls;

type
TLCTrackBar = class(TTrackBar)
private
{ Private declarations }
FOnLMouseUp: TNotifyEvent;
protected
{ Protected declarations }
procedure WMLButtonUp(var Message: TWMLButtonUp);
message WM_LBUTTONUP;
public
{ Public declarations }
published
{ Published declarations }
property OnLMouseUp: TNotifyEvent read FOnLMouseUp write FOnLMouseUp;
end;


procedure Register;

implementation

procedure Register;
begin

RegisterComponents('Samples', [TLCTrackBar]);
end;


{ TLCTrackBar }

procedure TLCTrackBar.WMLButtonUp(var Message: TWMLButtonUp);
begin

if Assigned(FOnLMouseUp) then

FOnLMouseUp(Self);

inherited
end;


end.


另外两个事件依此类推
 
谢谢了!
LeeChange
yxyyyy
 
后退
顶部