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 ...
随机推荐
- Redis 穿透和雪崩
Redis穿透 出现原因:频繁的查询一个不存在的数据,由于缓存不命中,每次都要查询持久层,从而失去缓存保护后端的意义 解决方法: 部署过滤器拦截: 将数据库中数据的存在的Id存入列表,放入缓存中,每次 ...
- php数组和部分操作函数
1. 数组定义 数组的定义使用 array()方式定义,可以定义空数组: <?php $number = array(1,3,5,7,9); //定义空数组 $result = array(); ...
- Android软键盘遮挡布局问题;
布局被软键盘遮挡虽然不是什么大问题,但还是比较影响用户体验的:最让人恼火的是当前输入框被软键盘被遮挡,来看一下解决方法: 1.当前输入框被软键盘遮挡,仅把输入框显示出来,不改变整体布局: 设置Mani ...
- 如何使用IntelliJ集成nodejs进行接口测试<response demo>
1.相关的配置及安装,在如下地址进行参考,这位大师写得也挺好(mac和windows都可以下载) https://www.jianshu.com/p/dd2d2d0ff133 2.在集成nodejs的 ...
- python学习之----深网和暗网
深网是网络的一部分,与浅网(surface Web)对立.浅网是互联网上搜索引擎可以抓 到的那部分网络.据不完全统计,互联网中其实约90% 的网络都是深网.因为谷歌不 能做像表单提交这类事情,也找不到 ...
- hadoop 问题及解决方式
转自http://www.bkjia.com/ASPjc/931209.html 解决Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows ...
- oracle 表或视图不存在
导入导出时,会自动表名自动加上了““双引号需要将表名改一下就可以了 alter table "oldtablename" rename to newtableName;
- iOS跳转洁面时隐藏tabBar的方法
//1.设置self.tabBarController.tabBar.hidden=YES; self.tabBarController.tabBar.hidden=YES; //2. ...
- 《汇编语言 基于x86处理器》第十二章浮点数部分的代码
▶ 书中第十二章的程序,主要讲了 FPU 的指令和浮点数计算的过程 ● 代码,简单的 32 为浮点数测试 INCLUDE Irvine32.inc INCLUDE macros.inc .data f ...
- mybatis-spring 集成
http://www.mybatis.org/spring/zh/index.html http://www.mybatis.org/mybatis-3/zh/java-api.html 编程API: ...