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 ...
随机推荐
- Servlet基础学习
Servlet学习 Servlet是Server与Applet的缩写,是服务端小程序的意思.使用Java语言编写的服务器端程序,可以像生成动态的WEB页,Servlet主要运行在服务器端,并由服务器调 ...
- Java 4- Java 变量类型
Java 变量类型 在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifier [ = value][, identifier [= value] ...] ...
- 为什么使能RPS/RFS, 或者RSS/网卡多队列后,QPS反而下降?
http://laoar.github.io/blog/2017/05/07/rps/ TL;DR RPS 即receive side steering,利用网卡的多队列特性,将每个核分别跟网卡的一个 ...
- redis管道技术
1.redis管道pipeline解决的问题: 由于redis通信是通过tcp协议基础,并且是堵塞的处理方式,在第一个请求没有执行并返回前,无法处理第二个请求.所以事件浪费在了网络传输和堵塞请求中. ...
- 连接Hive的客户端界面工具–SQuirrel SQL Client
关键字:Hive客户端.界面.SQuirrel SQL Client 刚看到一个可以连接Hive的客户端界面工具–SQuirrel SQL Client,试了一下,用起来还行,在这里记录一下安装及使用 ...
- 数据库导入Excel
package com.cfets.ts.s.user.rest; import java.io.File; import java.io.FileInputStream; import java.i ...
- java 类拷贝
直接上代码:public class Demo { public static void main(String[] args) throws CloneNotSupportedException { ...
- Ruby学习笔记5: 动态web app的建立 (2)
上一节里,我们搭建了一个数据库的结构,并用index验证了request-response cycle,如下图: 1. Add show method into Controller 这一节,我们要继 ...
- python中的reverse
reverse()将列表中的所有元素位置反转,举个例子: a = [1, 2, 3, 4, 5] a.reverse() print(a) 输出结果: [5, 4, 3, 2, 1]
- Java并发:线程间数据传递和交换
转自:https://www.cnblogs.com/java-zzl/p/9741288.html 一.通过SynchronousQueue方式实现线程间数据传递: 线程A与线程B共同持有一个Syn ...