如何把MIDI文件放进可执行文件中?(139分)

  • 主题发起人 ilovedelphi4
  • 开始时间
I

ilovedelphi4

Unregistered / Unconfirmed
GUEST, unregistred user!
各位朋友,你们好!
这个问题颇急,希望有知道的朋友能够告诉我,步骤
最好详细一些。

问题一是:如何把MIDI音乐文件放进EXE可执行文件中?
这个问题我曾经在这里问过,可惜的是答题的二位朋友
都没有把步骤将清楚,以至在下有点摸不着头脑了。

问题二是:如果把MIDI文件做进资源文件中去,在程序
中还能用MEDIAPLAYER元件控制这些MIDI文件吗?还能
像以前没有放进资源文件中那样操作MIDI文件吗?

在下先谢谢各位啦!
 
tqz写了一个控件,可以在exe文件中加入任何数据.
你可以把midi文件作为一个数据流写入exe,播放之前
在把它写到一个临时文件,就可以了.

你要把midi放入exe,那exe不是会变得很庞大?
 
请问这个控件在那里可以得到?能不能MAIL给在下?谢!
 
midi不是只保存音乐指令吗?
应该不是很大吧?

如果保存前先压缩一下,就没问题了。
关于压缩,我手头有个ZLib.Pas,
基于流的,很好用,压缩率也很高。
 
http://202.120.100.49/tqz
有那个东东
 
<style type="text/css">.text{font-family:宋体;font-size:10.5pt}</style><pre class="text">
//在菜单project-&amp;gt;resources下建立new-&amp;gt;user data,resource type='MID'
//并将lost.mid文件插入资源文件中(project1.res)
procedure TForm1.BitBtn1Click(Sender: TObject);
var
R: TResourceStream;
begin

r:=TResourceStream.Create(HInstance, 'lost', 'MID');
//其中lost为mid歌曲名称,MID为资源类型
r.SaveToFile('c:/temp.mid');
r.Free;
MediaPlayer1.FileName:='c:/temp.mid';
MediaPlayer1.open;
MediaPlayer1.Play;
end;


//我这有做好的一个例子,如果你需要,可以告诉我,
EMAIL:<a href="mailto:harbinlss@163.net">harbinlss@163.net</a>
</font></pre>
 
你们说的哪个控件我不会使用。连安装都有问题。
有谁使用过吗?
 
你为何非用控件,我写的程序不好使吗???
如有疑问,请说出来
 
lss 的程序好
 
他较懒吧,可我喜欢你的方法,等我试一下。
谢谢!
 
多谢!!!
 
朋友,你那个程序挺好的。只是不知道
为啥每次运行后在C盘下要出现MIDI文件呢?
能不能不让它出现呢?要隐藏就彻底隐藏。

另外,我为啥在菜单project下找不到resources
这个选项?

还有你那个做好的EXAMPLE能不能给在下呢?
谢谢啦!
 
我只是做个例子,你不必非要把临时文件放在c:/下,另外可以隐藏文件,
干脆用完了就删除掉,你觉得怎么样
你找不到resources选项菜单,不太可能吧,难道你用的不是d4
另外还找不到,可用任何文本编辑器(例如记事本)编写一文件
midi.rc,其内容为为下面一行(c:/lost.mid为播放的文件)
lost MID"c:/lost.mid"
存盘保存文件名为midi.rc
用C:/Program Files/Borland/Delphi4/Bin/brc32 -r midi.rx
进行编译资源文件,将编译好的midi.res复制到你的工程文件目录,
在工程文件中加入{$R *.RES}或{$R midi.RES}(默认在工程文件中已经有了)
例子我已经发送过去了
 
接受答案了.
 
关于文件的隐藏,可以使用临时文件,
相关代码:
//取Windows临时目录
function GetWinTempDir:String;
var
Path:array[0..Max_Path] of Char;
begin

Result:='';
try
GetTempPath(SizeOf(Path),Path);
Result:=StrPas(Path);
except
end;

end;


//申请临时文件名
function GetTempFile(PathName,PrefixStr:String;UniqueID:Integer=0):String;
var
FileName:array[0..2047] of Char;
begin

//返回值非零,成功
if GetTempFileName(PChar(PathName),PChar(PrefixStr),
UniqueID,@FileName)<>0 then

Result:=FileName
else

Result:='';
end;


使用完毕记得删除
 
顶部