本人正需要用Flash控件做一个程序,但碰到问题,望指教:代码如下:
unit FlashPtoject;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, OleCtrls, ShockwaveFlashObjects_TLB, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
ShockwaveFlash1: TShockwaveFlash;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
OpenDialog1: TOpenDialog;
ScrollBar1: TScrollBar;
Label1: TLabel;
Timer1: TTimer;
Label2: TLabel;
Panel1: TPanel;
procedure N2Click(Sender: TObject);
procedure OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);
procedure N5Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
private
Forstep:integer;
Pristep:integer; playing:boolean;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function IntToTime(int :integer):string;{将整数转为时间格式}
var timestr:string;
begin
if int div 60 =0 then timestr:='0:' + inttostr(int)
else
begin
timestr:= inttostr(int Mod 60);
int:=int div 60;
if int div 60 =0 then timestr:=inttostr(int)+':'+timestr
else
begin
timestr:=Inttostr(int mod 60)+ ':'+timestr;
int :=int div 60;
timestr:=inttostr(int)+':'+timestr;
end
end;
result:=timestr;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
OpenDialog1.Create(nil);
OpenDialog1.Execute;
end;procedure TForm1.OpenDialog1CanClose(Sender: TObject;
var CanClose: Boolean);
begin
ShockwaveFlash1.Movie:=Opendialog1.Files.CommaText;
ScrollBar1.Max:=ShockwaveFlash1.TotalFrames;
Label1.Caption:='正在播放: '+'0:00';
Label2.Caption:='TOTAL: '+inttotime(ShockwaveFlash1.TotalFrames div 12);
Playing:=true;
end;procedure TForm1.N5Click(Sender: TObject);
begin
with ShockwaveFlash1 do
begin
GotoFrame(CurrentFrame+Forstep);
end;
end;procedure TForm1.N10Click(Sender: TObject);
begin
Forstep:=strtoint(inputbox('修改步长','请输入步长值(整数):',inttostr(Forstep)));
end;procedure TForm1.FormCreate(Sender: TObject);
begin
playing:=false;
Forstep:=5;
PriStep:=5;
end;procedure TForm1.N6Click(Sender: TObject);
begin
with ShockwaveFlash1 do
begin
GotoFrame(CurrentFrame-Pristep);
end;end;procedure TForm1.N11Click(Sender: TObject);
begin
Pristep:=strtoint(inputbox('修改步长','请输入步长值(整数):',inttostr(Pristep)));
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if playing=true then
Label1.Caption:='正在播放: '+inttotime(ShockwaveFlash1.CurrentFrame div 12);
ScrollBar1.Position:=ShockwaveFlash1.CurrentFrame;
end;procedure TForm1.N8Click(Sender: TObject);
begin
ShockwaveFlash1.Play;
end;procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
ShockwaveFlash1.GotoFrame(ScrollBar1.Position);
ShockwaveFlash1.Play;
end;end.
自行后,提示如下错误:EOleexception with message"未指定的错误"?
unit FlashPtoject;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, OleCtrls, ShockwaveFlashObjects_TLB, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
ShockwaveFlash1: TShockwaveFlash;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
OpenDialog1: TOpenDialog;
ScrollBar1: TScrollBar;
Label1: TLabel;
Timer1: TTimer;
Label2: TLabel;
Panel1: TPanel;
procedure N2Click(Sender: TObject);
procedure OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);
procedure N5Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
private
Forstep:integer;
Pristep:integer; playing:boolean;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function IntToTime(int :integer):string;{将整数转为时间格式}
var timestr:string;
begin
if int div 60 =0 then timestr:='0:' + inttostr(int)
else
begin
timestr:= inttostr(int Mod 60);
int:=int div 60;
if int div 60 =0 then timestr:=inttostr(int)+':'+timestr
else
begin
timestr:=Inttostr(int mod 60)+ ':'+timestr;
int :=int div 60;
timestr:=inttostr(int)+':'+timestr;
end
end;
result:=timestr;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
OpenDialog1.Create(nil);
OpenDialog1.Execute;
end;procedure TForm1.OpenDialog1CanClose(Sender: TObject;
var CanClose: Boolean);
begin
ShockwaveFlash1.Movie:=Opendialog1.Files.CommaText;
ScrollBar1.Max:=ShockwaveFlash1.TotalFrames;
Label1.Caption:='正在播放: '+'0:00';
Label2.Caption:='TOTAL: '+inttotime(ShockwaveFlash1.TotalFrames div 12);
Playing:=true;
end;procedure TForm1.N5Click(Sender: TObject);
begin
with ShockwaveFlash1 do
begin
GotoFrame(CurrentFrame+Forstep);
end;
end;procedure TForm1.N10Click(Sender: TObject);
begin
Forstep:=strtoint(inputbox('修改步长','请输入步长值(整数):',inttostr(Forstep)));
end;procedure TForm1.FormCreate(Sender: TObject);
begin
playing:=false;
Forstep:=5;
PriStep:=5;
end;procedure TForm1.N6Click(Sender: TObject);
begin
with ShockwaveFlash1 do
begin
GotoFrame(CurrentFrame-Pristep);
end;end;procedure TForm1.N11Click(Sender: TObject);
begin
Pristep:=strtoint(inputbox('修改步长','请输入步长值(整数):',inttostr(Pristep)));
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if playing=true then
Label1.Caption:='正在播放: '+inttotime(ShockwaveFlash1.CurrentFrame div 12);
ScrollBar1.Position:=ShockwaveFlash1.CurrentFrame;
end;procedure TForm1.N8Click(Sender: TObject);
begin
ShockwaveFlash1.Play;
end;procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
ShockwaveFlash1.GotoFrame(ScrollBar1.Position);
ShockwaveFlash1.Play;
end;end.
自行后,提示如下错误:EOleexception with message"未指定的错误"?
然后按ctrl+shift+c
生成代码,把代码部分考入
delphi\bin\tregsvr 你的flash.ocx的全路经
或者在有flash.ocx的文件夹下执行tregsvr flash.ocx
更有趣的是,只有一个swf文件可以播放,而其他的都不能放!
然后在DELPHI将其转换就行了。说一下Flash相关软件的问题。就目前来说,国内的Flash播放软件已经有很多了,而且功能大部分重复,从技术上讲,所有的Flash播放软件都依赖于flash.ocx控件,这样只是受制于macomedia。
而纵观国外,Flash的周边制作工具已经在功能及技术上达到了相当的高度。我想,国内的开发人员应该把精力更多的放在flash周边制作工具方面,当然,软件开发已后也会有市场,而播放软件则可以用来练练手。欢乐大家发表各自的意见。