Delphi 播放器[源码]
2012-12-18 00:18
525 查看
Delphi 音乐播放器,支持桌面歌词、换肤、换颜色、歌词自动下载,Win7下支持小窗口预览,有些功能未完全完成,就如调整音量(懒得搞,但是可以听了,只写了一次性播放列表没得循环的)。支持酷狗、QQ的动感歌词,以动感方式显示自己的实现方法,工程是使用Delphi XE2开发,原本是用delphi7后因为要支持win7下面的那个小窗口模式的,所以改为delphi xe2了。
主界面:
自己使用GDI+做了个png图片的控件根据皮肤的xml配置文件动态生成上去的,一部分代码:
不需要安装额外的第三方控件, 有兴趣可以下载全部源码查看。
桌面歌词:
这个结纠了我很久,也花了我不少的晚上(白天要上班,我也非职业程序员),最后还是实现了在同一窗口实现背景层,未播放和正在播放的颜色层,以及滚动,不得不说其中的一点不爽,就是计算文字的宽度,这个还有点不准确,导致有的歌词绘制没有这么准确,其中有一点我感觉比酷狗的好看,我并未直接将上层与下层叠加,而是将上层向上错开了一点这样一来显示出了带有点立体感的效果了。
下面是用来绘制第一行和第二行歌词的代码:
在我的桌面歌词中实现同一层绘制已经播放和未播放关键在于下面这句了:
使用这句不断截剪矩形(自己这么认为)配合速度显示出不同的效果
播放列表:
是继承自TCustomDrawGrid自绘的一个(这个想了很久最后决定用这个了),一部分代码,代码很简单,也没写得很全,因为自己懒得搞,所以列表是直接传入一个 TList 的,所有的添加列表代码的都在主窗口那里做了
后记:本来还想写在线搜索播放的,现在已经没有什么心情了,关于MP3的标签,由于写了一部分,但未用在这里,这里就做了简单的处理连歌曲名和哥手都直接使用 - 分割标题的,哈哈,这点实在是太。。。。。自己都看不过去了,大家可以一展自己的所长将自己喜欢的东西加上去,来完善这个播放器。别忘了给我看看啊。
现已开源!
下载地址:http://download.csdn.net/detail/zyjying520/4900043
效果图:
主界面:
自己使用GDI+做了个png图片的控件根据皮肤的xml配置文件动态生成上去的,一部分代码:
type TImageState = (isNormal, isActive, isDown, isDisable); TGDIImageButton = class(TGraphicControl) private (*鼠标进入*) FOnMouseEnter : TNotifyEvent; (*鼠标离开*) FOnMouseLeave : TNotifyEvent; (*当前状态*) FState : TImageState; (*状态图标数量*) FImgCount: Integer; (*自动调整大小*) FAutoSize: Boolean; (*按钮是否按下状态*) FDownState: Boolean; (*图片文件名称*) FFileName: string; (*GDI图片对象*) FGDIImage: TGPImage; (*标题*) FCaption: string; (*是否显示标题*) FShowCaption: Boolean; (*对齐方式*) FAlignment : TAlignment;
不需要安装额外的第三方控件, 有兴趣可以下载全部源码查看。
桌面歌词:
这个结纠了我很久,也花了我不少的晚上(白天要上班,我也非职业程序员),最后还是实现了在同一窗口实现背景层,未播放和正在播放的颜色层,以及滚动,不得不说其中的一点不爽,就是计算文字的宽度,这个还有点不准确,导致有的歌词绘制没有这么准确,其中有一点我感觉比酷狗的好看,我并未直接将上层与下层叠加,而是将上层向上错开了一点这样一来显示出了带有点立体感的效果了。
下面是用来绘制第一行和第二行歌词的代码:
procedure TGDIDrawLyric.DrawLyricBitmapFirst; begin FStrWidth1 := Round(FFirstStrWidth + FFontHeight * 0.75); if Assigned(FBackImage) then FBackImage.Free; FBackImage := TGPBitmap.Create(FStrWidth1, FFontHeight+1); DrawStrToImage(FBackImage , FFirstStr, FFontName, FStrWidth1, FBackColor1, FBackColor2, FFontHeight, True, StringAlignmentNear); if Assigned(FForeImage) then FForeImage.Free; FForeImage := TGPBitmap.Create(FStrWidth1, FFontHeight+1); DrawStrToImage(FForeImage , FFirstStr, FFontName, FStrWidth1, FForeColor1, FForeColor2, FFontHeight, False, StringAlignmentNear); UpdateDisplay; end; procedure TGDIDrawLyric.DrawLyricBitmapNext; begin FStrWidth2 := Round(FNextStrWidth + FFontHeight * 0.75); if Assigned(FBackImage2) then FBackImage2.Free; FBackImage2 := TGPBitmap.Create(FStrWidth2, FFontHeight+1); DrawStrToImage(FBackImage2 , FNextStr, FFontName, FStrWidth2, FBackColor1, FBackColor2, FFontHeight, True, StringAlignmentNear); if Assigned(FForeImage2) then FForeImage2.Free; FForeImage2 := TGPBitmap.Create(FStrWidth2, FFontHeight+1); DrawStrToImage(FForeImage2 , FNextStr, FFontName, FStrWidth2, FForeColor1, FForeColor2, FFontHeight, False, StringAlignmentNear); UpdateDisplay; end;
在我的桌面歌词中实现同一层绘制已经播放和未播放关键在于下面这句了:
gFore.SetClip(MakeRect(TmpLeft2, TmpTop2, FPosition, TmpHeight)) ;
使用这句不断截剪矩形(自己这么认为)配合速度显示出不同的效果
播放列表:
是继承自TCustomDrawGrid自绘的一个(这个想了很久最后决定用这个了),一部分代码,代码很简单,也没写得很全,因为自己懒得搞,所以列表是直接传入一个 TList 的,所有的添加列表代码的都在主窗口那里做了
TPlayListCtl = class(TCustomDrawGrid) private (*鼠标进入*) FOnMouseEnter : TNotifyEvent; (*鼠标离开*) FOnMouseLeave : TNotifyEvent; FMouseMoveIndex : Integer; FPlayingIndex : Integer; FPlayColor : TColor; FMouseMoveColor : TColor; FFocusedColor : TColor; FSingerPic: TBitmap; (*要绘制数据*) FData:TList; procedure SetPlayListData(Value: TList); procedure SetSingerPic(Value: TBitmap); procedure SetNowPlayIndex(Value: Integer); procedure SetFocusedColor(Value : TColor); (*鼠标事件*) procedure FDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure FMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
后记:本来还想写在线搜索播放的,现在已经没有什么心情了,关于MP3的标签,由于写了一部分,但未用在这里,这里就做了简单的处理连歌曲名和哥手都直接使用 - 分割标题的,哈哈,这点实在是太。。。。。自己都看不过去了,大家可以一展自己的所长将自己喜欢的东西加上去,来完善这个播放器。别忘了给我看看啊。
现已开源!
下载地址:http://download.csdn.net/detail/zyjying520/4900043
效果图:
相关文章推荐
- 《GOF设计模式》—命令(COMMAND)—Delphi源码示例:支持取消和重做(一次取消)
- 《GOF设计模式》—适配器(ADAPTER)—Delphi源码示例:绘图编辑器
- 自己动手编译播放器MPC-HC的源码
- 以前搞Delphi就没见过这么强大的用户权限系统,学C#才一个月,通用权限管理系统组件源码工具很强
- Delphi制作QQ自动登录器源码
- 《GOF设计模式》—观察者(OBSERVER)—Delphi源码示例:时钟
- [delphi]修改indy源码后重新编译
- 求一款播放界面有频谱的简易播放器源码!谢谢啦!
- 《GOF设计模式》—状态(STATE)—Delphi源码示例:状态接口
- 以前搞Delphi就没见过这么强大的用户权限系统,学C#才一个月,通用权限管理系统组件源码工具很强
- 软件注册的实现 delphi 源码
- 《GOF设计模式》—访问者(VISITOR)—Delphi源码示例:访问者接口
- Base64编码/解码Delphi源码
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:延迟初始化对象
- delphi 三层 架构 源码 支持安卓 RealThinClient SDK v6
- Delphi之三汇模拟语音卡(SHT-8B/PCI/FAX)可复用源码
- 一个基于ffmpeg,Android 和linux SDL 都可使用的播放器源码
- 深入VCL源码研究DELPHI窗体的创建和关闭
- 简易文本编辑器(Delphi源码)
- 《GOF设计模式》—组合(COMPOSITE)—Delphi源码示例:最大化Component接口