Delphi实现悬浮的卡拉OK字幕
千千静音的悬浮式卡拉OK字幕,大家一定觉得不错吧,其实用Delphi,你也可以很容易的做得到。首先我们在Delphi中新建一个700*130左右的窗体,上面放置两个Image控件,Image控件的Align=alClient,使它们铺满窗口,唯一不同的是,Image1的Visuble=ture,用于前台显示字幕,Image2的Visible=false,用于后台绘制,还要用到一个Timer控件,Interval=100。
要使字幕悬浮在Windows桌面上显示,第一要求窗体是透明的,只显示字幕;第二要求字幕位于顶层,其它窗体不能覆盖它。 我们分别解决它。
(1)窗体是透明的,只显示字幕。
Delphi要实现透明窗体是非常容易的,Form的属性页里有两个参数,设TransparentColor=True 、TransparentColorValue=clWhite即可,第2个参数用clWhite是因为Image绘制字幕时使用白色底,而Image铺满窗口后,白底色会被过滤变透明,只留下字幕。
(2)顶层无标题无边框窗体。
要做到这一点,只需要加入以下代码:
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
visible:=true;
with Params do
begin
Style := WS_POPUP or WS_CLIPSIBLINGS ;
ExStyle := WS_EX_TOOLWINDOW or WS_EX_TOPMOST;
end;
end;
好了,给出全部代码吧。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Image1DblClick(Sender: TObject);
private
{ Private declarations }
protected
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;
var
Form1: TForm1;
iy:integer;
implementation
{$R *.dfm}
//实现顶层无标题无边框窗体。
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
visible:=true;
with Params do
begin
Style := WS_POPUP or WS_CLIPSIBLINGS ;
ExStyle := WS_EX_TOOLWINDOW or WS_EX_TOPMOST;
end;
end;
//初始化设定字体大小,分别使用黑色和红色绘制字幕
procedure TForm1.FormCreate(Sender: TObject);
begin
iy:=0;
image1.Parent.DoubleBuffered :=true;
image2.Parent.DoubleBuffered :=true;
image1.Canvas.Font.Size :=50;
image2.Canvas.Font.Size :=50;
image1.Canvas.Font.Color :=clBtnText;
image2.Canvas.Font.Color :=clred;
image1.Canvas.TextOut(10,10,'我们都是中国人');
image2.Canvas.TextOut(10,10,'我们都是中国人');
timer1.Enabled :=true;
end;
//用定时器将IMAGE2的红色字幕复制到IMAGE1中,实现卡拉OK走字.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
iy:=iy+2;
if iy>image1.Width then iy:=image1.Width -1;
image1.Canvas.CopyRect(rect(0,0,iy,image1.Height -1),image2.Canvas,rect(0,0,iy,image1.Height -1));
end;
//双击字幕结束程序运行.
procedure TForm1.Image1DblClick(Sender: TObject);
begin
close;
end;
end.
要实现更漂亮的卡拉奇字幕,如文字加边加阴影什么的,在以上代码基础上发挥一下就可以了。
Delphi实现悬浮的卡拉OK字幕的更多相关文章
- VC实现卡拉OK字幕叠加
一. GDI编程基础 字幕叠加,应当是属于图形.图像处理的范畴.在Windows平台上,图形.图像处理的方法当然首选GDI(Graphics Device Interface,图形设备接口).GDI是 ...
- 双缓冲显示字幕(卡拉ok字幕)
思路: 1.设置定时器SetTime,在Ontime()里面确定显示矩形的大小,让后用DrawText把字铁道矩形上面: 2. int nTextHei = dc.GetTextExtent( m_s ...
- WebVTT字幕格式
[时间:2019-05] [状态:Open] [关键词:字幕,vtt,webvtt, 文件格式,cue,css] 0 引言 WebVTT(Web Video Text Tracks),通过HTML5中 ...
- 孙鑫MFC学习笔记5:文本显示
1.CreateSolidCaret添加一个插入符 参数:宽度,高度 如果设为0,就设为默认窗口边界的宽度和高度 2.GetSystemMetrics获取默认窗口边界的宽度和高度 3.Caret在创建 ...
- Android源码50例汇总,欢迎各位下载(转载)
下载中心好资料很多,藏在各个角落,小弟在此帮大家做了一个整理,做了一个下载目录,方便大家选择性下载. 源码实例如下: <Android应用开发揭秘>源代码推荐 http://down.51 ...
- 10行代码解析krc歌词文件
互联网上,我们常见的歌词格式有 LRC.TRC(天天动听歌词).KRC(KuGou ResourCe,酷狗资源文件)和 QRC(QQ音乐歌词):在影视制作中,人们通常会用其他的卡拉 OK 字幕格式,例 ...
- Delphi 悬浮窗口、浮动窗口的实现
源:Delphi 悬浮窗口.浮动窗口的实现 浮动窗体的实现 http://blog.tianya.cn/blogger/post_show.asp?BlogID=68097&PostID=80 ...
- 从Delphi 7升级到Delphi XE
Delphi 7和XE中间有好几个版本号,可都不太流行,一是由于Delphi有些边缘化,二是7在XP环境下是近乎完美的版本号.市场上关于delphi的书越来越少,提供从7升级到XE介绍的资料差点儿没用 ...
- Delphi实现窗口一直在桌面工作区内显示(重写WM_WINDOWPOSCHANGING消息)
有的时候我们要实现一个悬浮窗口,并使该窗口一直显示在桌面的工作区内.即整个窗口要一直显示在屏幕上,不能超出屏幕的上下左右边缘.此功能的实现也不难,我们需要自己写代码来响应窗口的WM_WINDOWPOS ...
随机推荐
- SAS获取最后一条观测到指定宏
data theLast; set sashelp.class nobs=last point=last; output; stop; run; data _null_; set theLast; c ...
- 一个windows计划任务的Nginx日志自动截断的批处理命令
net stop nginx taskkill /im nginx.exe /f cd E:\nginx e: set NO=%Date:~0,4%%Date:~5,2%%Date:~8,2% set ...
- sql-datediff
SQL中DateDiff的用法 DATEDIFF返回跨两个指定日期的日期和时间边界数. 语法DATEDIFF ( datepart , startdate , enddate ) 参数datepart ...
- JavaWeb项目中web.xml有关servlet的基本配置
JavaWeb项目中web.xml有关servlet的基本配置: 我们注意到,tomcat下的conf中也有一个web.xml文件,没错的,所有的JavaWeb项目中web.xml都继承自服务器下的w ...
- ElasticSearch Java API
ElasticSearch-Java Client类型 ElasticSearch-TransportClient环境准备 ElasticSearch-TransportClient连接 Elasti ...
- python 之 json 与pickle 模块
序例化:将对象转换为可通过网络传输或可以存储到本地磁盘的数据格式(如:XML.JSON或特定格式的字节串)的过程称为序列化:反之,则称为反序列化. 1.[JSON] import json dic={ ...
- linux&php:ubuntu安装php-7.2
1.下载php源码,地址:http://www.php.net/downloads.php 这里下载的是tar.gz的包 2.解压安装 将安装包解压到/usr/local/php 安装C的编译工具 s ...
- day1作业(格式化输出)
练习:用户输入姓名.年龄.工作.爱好 ,然后打印成以下格式------------ info of Egon -----------Name : EgonAge : 22Sex : male ...
- c# 中实用包,实用dll。
Aspose.cell:用与操作Excel,生成,导入导出等. ICSharpCode.SharpZipLib.dll:用户压缩及解压ZIP包,根据需要也可以加密.
- 关于elment-ui树形控件Tree的使用
如果简单使用的tree树形控件,按照Element ui Tree 树形控件 官方文档使用即可,基本上能够完成大部分的需求. 但是如果需要对树形结构进行额外操作,仅仅根据官方文档提供的方案的话,可能就 ...