超级Flash播放器(SuperFlashPlayer)软件策划[欢迎有兴趣的朋友共同参与](100分)

  • 主题发起人 主题发起人 刀剑如梦
  • 开始时间 开始时间

刀剑如梦

Unregistered / Unconfirmed
GUEST, unregistred user!
====================刀剑如梦软件创作室===================================
本程序开发作为刀剑如梦软件室第一个软件交流项目,欢迎有兴趣的网友共同参与!
SuperFlashPlayer设计文档说明
【功能说明】

Flash是Macromedia公司出品的,广泛应用于互联网上动态的、可互动的Shockwave。
Flash格式文件体积小,可边下载边播放,避免了用户长时间的等待。
Flash可以用其生成动画,在网页中加入声音。生成多媒体的图形和界面,而使文件的体积却很小。
【功能特点】
可以播放Macromediao公司开发的Flash动画,支持SWF格式;
支持Flash文件列表播放,双击打开播放列表文件;
支持Flash网址文件播放;
支持全屏模式播放Flash文件;
可以截取、保存单帧图片;
播放中快进,快退功能;
详尽的动画信息显示;
可以无级缩放播放大小;
显示播放进度,可以拖放;
IE缓存搜索及保存;
支持设置SWF格式文件搜索Flash动画功能;
独特的面板低色设置;
更多功能待加入。
【运行要求】

操作系统:支持Windows98, Windows ME,Windows 2000和Windows XP
软件需要安装Macromedia Flash插件支持
CPU:Pentium 133或更高
内存:32M
硬盘:至少200M硬盘空间
【注册办法】

暂定为免费软件开发
【历史记录】
实现播放SWF文件的基本功能
【策划人信息】
策划人:张晶晶
电子邮件:yckxzjj@163.com,yckxzjj@vip.sina.com
Delphi编程驿站:http://www.delphidak.com
本站宗旨:与您共同成长、进步!
 
这个我以前做过一个
 
很感兴趣!
 
好多类似软件,开发了玩还可以,想卖不容易。
 
此程序是作为驿站的源码交流!
Delphi编程驿站:http://www.delphidak.com
本站宗旨:与您共同成长、进步!
 
类似软件虽多,大都是基于ActiveX控件
官方网站好像有Flash Player SDK
 
有没有基于DirectShow的??
Windows MediaPlayer9放Flash是通过什么???
 
设想:增加资源编辑及分离功能!
 
设想增加EXE-》SWF、SWF-》EXE、SWF转屏保、截图自动设置桌面、在桌面播放Flash、自动设置资源管理器中预览Flash、Flash下载及Flash分类管理功能。
 
设想重点在浏览上下功夫,比如模仿ACDSEE的浏览管理Flash的软件,
 
功能模块化.内存流播放.正在收集资料,待新的策划出来,将与网友们共同交流!
 
源码交流第一节
{查询目录主体函数}
function TFlashPlayerFrm.SearchSwfFile(DirPath, SwfFileName: string;
var BackUpResult: TStrings): Boolean;
var
I: Integer;
IsBackUp: Boolean;
SubDir: TStrings;
SearchRec: TSearchRec;
begin
IsBackUp := False;
if Trim(SwfFileName) <> '' then
begin
{字符串列表必须动态生成}
SubDir := TStringList.Create;
{找出所有下级子目录}
if (FindFirst(DirPath + '*.*',faDirectory,SearchRec) = 0) then
begin
if IsValidDir(SearchRec) then
SubDir.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0)do
begin
if IsValidDir(SearchRec) then
SubDir.Add(SearchRec.Name)
else
begin
{查找当前目录}
if FileExists(DirPath + SwfFileName) then
begin
BackUpResult.Add(DirPath + SwfFileName);
if SearchRec.Name <> '..' then
begin
if UpperCase(ExtractFileExt(SearchRec.Name)) =
UpperCase(ExtractFileExt(SwfFileName)) then
FlashFileListBox.Items.Add(DirPath + SearchRec.Name);
end;
end;
end;
end;
FindClose(SearchRec);
IsBackUp := True;
for I := 0 to SubDir.Count - 1do
IsBackUp := SearchSwfFile(DirPath + SubDir.Strings +
'/', SwfFileName, BackUpResult) or IsBackUp;
{释放资源并返回结果}
SubDir.Free;
end;
Result := IsBackUp;
end;
end;

{从搜索记录中判断是否是子目录}
function IsValidDir(SearchRec: TSearchRec): Boolean;
begin
if (SearchRec.Attr = 16) and (SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
Result := True
else
Result := False;
end;

{打开播放文件目录}
procedure TFlashPlayerFrm.OpenFalshDirList;
var
Info: TBrowseInfo;
Dir: array[0..260] of char;
ItemId: PItemIDList;
FalshDirList: TStrings;
begin
with Infodo
begin
hwndOwner := Self.Handle;
pidlRoot := nil;
pszDisplayName := nil;
lpszTitle := '请选择播放目录文件夹:';
ulFlags := 0;
lpfn := nil;
lParam := 0;
iImage := 0;
end;
ItemId := SHBrowseForFolder(Info);
if ItemId <> nil then
begin
SHGetPathFromIDList(ItemId, @Dir);
FalshDirList := TStringList.Create;
try
if Length(string(Dir)) = 3 then
SearchSwfFile(string(Dir), '*.swf', FalshDirList)
else
SearchSwfFile(string(Dir)+'/', '*.swf', FalshDirList);
finally
FalshDirList.Free;
end;
end;
end;
 
下面的呢?
 
希望看到下面的!
 
{打开URL播放文件}
procedure TFlashPlayerFrm.FileOpenURLClick(Sender: TObject);
var
URLFileName: String;
I: Integer;
begin
URLFileName := InputBox('信息提示','请输入有效的URL地址链接','');
try
if pos(UpperCase('http://'),UpperCase(URLFileName))>0 then
begin
if URLFileName<>'' then
begin
with FlashFileListBoxdo
begin
for I:=0 to Items.count -1do
if Items=LowerCase(URLFileName) then
begin
ShowMessage('此关键字已经存在!');
Exit;
end;
FlashFileListBox.Items.Add(LowerCase(URLFileName));
FlashFileListBox.SetFocus;
end;
end
else
ShowMessage('无效的URL地址链接,请重新输入');
FlashPlayFileFrm.ShockwaveFlash.Movie := URLFileName;
if FlashPlayFileFrm.ShockwaveFlash.ReadyState = 4 then
FlashPlayFileFrm.Show;
StatusBar.Panels[1].Text := IntToStr(FlashPlayFileFrm.ShockwaveFlash.TotalFrames);
end
else
ShowMessage('无效的URL地址链接,请重新输入');
except
ShowMessage('System Application Error')
end;
end;
 
{==============================================================================}
{=================================过程定义集合=================================}
{================= Copyright(R) 2003 KingLong Software Studio =================}
{==============================================================================}
{打开播放文件目录}
procedure TFlashPlayerFrm.OpenFalshDirList;
var
Info: TBrowseInfo;
Dir: array[0..260] of char;
ItemId: PItemIDList;
FalshDirList: TStrings;
begin
with Infodo
begin
hwndOwner := Self.Handle;
pidlRoot := nil;
pszDisplayName := nil;
lpszTitle := '请选择播放目录文件夹:';
ulFlags := 0;
lpfn := nil;
lParam := 0;
iImage := 0;
end;
ItemId := SHBrowseForFolder(Info);
if ItemId <> nil then
begin
SHGetPathFromIDList(ItemId, @Dir);
FalshDirList := TStringList.Create;
try
if Length(string(Dir)) = 3 then
SearchSwfFile(string(Dir), '*.swf', FalshDirList)
else
SearchSwfFile(string(Dir)+'/', '*.swf', FalshDirList);
finally
FalshDirList.Free;
end;
end;
end;

{显示初始化窗体}
procedure TFlashPlayerFrm.ShowSplash;
var
StopTime: LongInt;
begin
StopTime := GetTickCount div 1000;
while ((GetTickCount div 1000) < (StopTime + 1))do
Sleep(1);
end;

{窗体初始化时赋应用程序消息}
procedure TFlashPlayerFrm.FormCreate(Sender: TObject);
begin
// if ParamCount > 0 then
// begin
// FlashPlayFileFrm.ShockwaveFlash.Movie := ParamStr(1);
// end;
ShowSplash;
do
ublePlayFile;
end;

{打开Flash播放文件}
procedure TFlashPlayerFrm.FileOpenFlashClick(Sender: TObject);
begin
FlashFileOpenDlg.Filter := '所有Flash播放文件(.SWF)|*.SWF';
FlashFileOpenDlg.InitialDir := ExtractFileDir(Application.ExeName) + '/FlashFile/';
FlashFileOpenDlg.Options := [ofHideReadOnly,ofEnableSizing];
if FlashFileOpenDlg.Execute then
begin
FlashFileListBox.Items.AddStrings(FlashFileOpenDlg.Files);
FlashFileListBox.Selected[FlashFileListBox.Items.Count - 1];
FlashPlayFileFrm.ShockwaveFlash.Movie := FlashFileOpenDlg.FileName;
Timer.Enabled := True;
if FlashPlayFileFrm.ShockwaveFlash.ReadyState = 4 then
begin
FlashPlayFileFrm.Show;
StatusBar.Panels[1].Text := IntToStr(FlashPlayFileFrm.ShockwaveFlash.TotalFrames);
TrackBar.Max := FlashPlayFileFrm.ShockwaveFlash.TotalFrames;
end;
end;
N25.Enabled := True;
end;
{控制播放文件}
procedure TFlashPlayerFrm.TimerTimer(Sender: TObject);
begin
FlashPlayerFrm.Caption := 'SuperFlashPlayer 1.0 [' + FormatDateTime('yyyy年mm月dd日 dddd hh:mm:ss',Now) + ']';
TrackBar.Position := FlashPlayFileFrm.ShockwaveFlash.CurrentFrame;
StatusBar.Panels[3].Text := IntToStr(FlashPlayFileFrm.ShockwaveFlash.FrameNum);
try
if TrackBar.Position - CountNum = 0 then
begin
CountNum := CountNum + 5;
FlashPlayFileFrm.ShockwaveFlash.GotoFrame(CountNum);
FlashPlayFileFrm.ShockwaveFlash.Play;
end;

if not FlashPlayFileFrm.ShockwaveFlash.Playing then
begin
CountNum := TrackBar.Position + 5;
FlashPlayFileFrm.ShockwaveFlash.GotoFrame(CountNum);
FlashPlayFileFrm.ShockwaveFlash.Play;
end;

if FlashPlayFileFrm.ShockwaveFlash.TotalFrames < FlashPlayFileFrm.ShockwaveFlash.FrameNum then
begin
CountNum := 0;
FlashPlayFileFrm.ShockwaveFlash.GotoFrame(CountNum);
ControlNextClick(nil);
end;

if TrackBar.Position < CountNum then
begin
ControlNextClick(nil);
end;
except
Application.Terminate;
end;
end;
 
procedure TFlashPlayFileFrm.MouseRightMessage(var Msg: TMsg;
var Handled: Boolean);
begin
if (Msg.message = WM_RBUTTONDOWN) and (Msg.hwnd = ShockwaveFlash.Handle) then
begin
Handled := True;
RightPM.Popup(Mouse.CursorPos.X,Mouse.CursorPos.y);
end;
end;

procedure TFlashPlayFileFrm.FormCreate(Sender: TObject);
var
hMenuHandle:Integer;
begin
hMenuHandle:=GetSystemMenu(Handle,False);
if (hMenuHandle<>0) then
DeleteMenu(hMenuHandle,SC_CLOSE,MF_BYCOMMAND);
Application.OnMessage:= MouseRightMessage;
end;

procedure TFlashPlayFileFrm.WMSYSCommand(var msg: TWMSYSCommand);
begin
if (Msg.CmdType = SC_MAXIMIZE) then
WindowMaximize
else
DefaultHandler(Msg);
end;

procedure TFlashPlayFileFrm.WindowMaximize;
begin
Setwindowlong(Handle,GWL_STYLE,Getwindowlong(Handle,GWL_STYLE)and not WS_CAPTION);
WindowState := wsMaximized;
end;

procedure TFlashPlayFileFrm.N7Click(Sender: TObject);
begin
SetWindowLong(Handle,GWL_STYLE, GetWindowLong(Handle,GWL_STYLE) or WS_CAPTION);
WindowState := wsNormal;
end;

procedure TFlashPlayFileFrm.FormDestroy(Sender: TObject);
begin
ShockwaveFlash.FreeOnRelease;
end;

procedure TFlashPlayFileFrm.FormResize(Sender: TObject);
begin
ActiveControl := nil;
ActiveControl := ShockwaveFlash;
end;

procedure TFlashPlayFileFrm.N6Click(Sender: TObject);
begin
WindowMaximize;
end;

procedure TFlashPlayFileFrm.FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
const
SC_DragMove: LongInt = $F012;
begin
ReleaseCapture;
SendMessage(ShockwaveFlash.Handle, WM_SYSCOMMAND, SC_DragMove, 0);
end;

procedure TFlashPlayFileFrm.CopySingleFrame;
begin
FlashPlayFileFrm.ShockwaveFlash.Stop;
CopyBitMap := TBitmap.Create;
try
CopyBitMap.Width := FlashPlayFileFrm.ShockwaveFlash.Width;
CopyBitMap.Height := FlashPlayFileFrm.ShockwaveFlash.Height;
FlashPlayFileFrm.ShockwaveFlash.PaintTo(CopyBitMap.Canvas.Handle,0,0);
if SavePictureDialog.Execute then
CopyBitMap.SaveToFile(SavePictureDialog.FileName+'.bmp');
finally
CopyBitMap.Free;
end;
end;

procedure TFlashPlayFileFrm.N4Click(Sender: TObject);
begin
CopySingleFrame;
end;

procedure TFlashPlayFileFrm.N1Click(Sender: TObject);
begin
FlashPlayerFrm.ControlPauseClick(Sender);
end;

procedure TFlashPlayFileFrm.N2Click(Sender: TObject);
begin
FlashPlayerFrm.ControlNextClick(Sender);
end;

procedure TFlashPlayFileFrm.N3Click(Sender: TObject);
begin
FlashPlayerFrm.ControlPreviousClick(Sender);
end;

procedure TFlashPlayFileFrm.N8Click(Sender: TObject);
begin
FlashPlayFileFrm.ShockwaveFlash.StopPlay;
FlashPlayFileFrm.ShockwaveFlash.Stop;
end;

procedure TFlashPlayFileFrm.N9Click(Sender: TObject);
begin
ShellAbout(Application.Handle,'SuperFlashPlayer 1.0','设计:张晶晶'+#13+'刀剑如梦软件创作室',Application.Icon.Handle);
end;

procedure TFlashPlayFileFrm.FormActivate(Sender: TObject);
begin
FlashPlayFileFrm.Left := (Screen.Width - FlashPlayFileFrm.Width) div 2;
FlashPlayFileFrm.Top := 0;
end;

procedure TFlashPlayFileFrm.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.hwnd=ShockwaveFlash.Handle)and(Msg.message=wm_Lbuttondown) then
begin
ReleaseCapture;
ShockwaveFlash.Perform(WM_SYSCOMMAND,$f012,0);
end;
end;
 
你想过SWF->AVI功能吗?我所作的“随心所欲FLASH”(FREEFLASH)已经实现了你上面所提的功能,现在正在想做这个功能,我己有大致的方案,不知你有没有什么好的想法?
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部