字体和壁纸合并后再更改壁纸--《用delphi开发共享软件》-15.2桌面提示器
procedure TFrmPlay.mnDeskPicClick(Sender: TObject);
Var s:String; i:Integer;
begin
//s:=Path+'SetPic.exe';
//EnableDebugPrivilege(True);
//ShellExecute(GetDesktopWindow ,'open',Pchar(s), nil,Pchar(Path),SW_SHow); Exit;
i:=sgPic.Row;
s:=sgPic.Cells[,i]; //原始图片文件
if pos(':',s)= then s:=Path+s; //==相对路径
if FileExists(s) then MakeWallPic(s); //产生并设置壁纸
//SetWallPaper(s,2);
end;
procedure TFrmPlay.MakeWallPic(sPic:String); //合并新墙纸
Var sBMP,sJPG:String; img,imgTmp:TImage;
JpegImage:TJpegImage;
udtblender:TBlendFunction;//图片效果处理参数
begin
with udtblender do
begin
Blendop:=AC_SRC_OVER;
Blendflags:=;
SourceConstantAlpha:=-spTransparent.Value;//透明度
AlphaFormat:=;
end; //s:=WinPath+'\'+ChangeFileExt(ExtractFileName(sPic),'.JPG');
sBmp:=Path+'DeskPic\'+ChangeFileExt(ExtractFileName(sPic),'.BMP');
sJPG:=Path+'DeskPic\'+ChangeFileExt(ExtractFileName(sPic),'.JPG');
img:=TImage.Create(nil);
imgTmp:=TImage.Create(nil); //创建BMP图片
JpegImage:=TJpegImage.Create; //创建JPG图片
try
img.AutoSize :=True;
img.Picture.LoadFromFile(sPic); //装载原始图片 //img.Picture.Assign(nil);
LoadBMPJPG(img,sPic);
//imgTmp.Picture.Assign(img.Picture);
imgTmp.Width :=img.Width;
imgTmp.Height :=img.Height;
imgTmp.Canvas.Draw(,,img.Picture.Graphic);//绘制到临时图片中
ShowHint(img);//在临时图片中绘制 提示文字信息
windows.AlphaBlend(imgTmp.Canvas.Handle,,,imgTmp.Width,imgTmp.Height,
img.Canvas.Handle,,,img.Width,img.Height,
udtblender); //关键调用api imgTmp.Picture.Bitmap.SaveToFile(sBMP);//保存临时文件到磁盘 //保存最终的JPG的壁纸文件:
JpegImage.Assign(imgtmp.Picture.Graphic); //JpegImage.CompressionQuality:=100;
JpegImage.PixelFormat:=jf24Bit;
JpegImage.Compress;
JpegImage.SaveToFile(sJPG);
finally
img.Free;
imgTmp.Free;
JpegImage.Free; //edFile.Text :=sBMP;
if Fileexists(sBMP) then SetRegWallPaper(sBMP);//设置壁纸
sleep();
if Fileexists(sJPG) then SetWallPaper(sJPG,); //设置壁纸
//MyDeleteFile(sBMP); //==不需要了!??
end;
end; procedure TFrmPlay.ShowHint(img:TImage); //合成文字
Var i,n,h,w,size:Integer; s,s2,sHint,sfmt:String;
begin
sHint:=''; //需要回执的特殊格式的文字;
if chkShowDate.Checked then sHint:=MyDatestr(SysUtils.Date,True); //显示日期
if chkShowWeek.Checked then //显示星期
sHint:=sHint+' '+Days[DayofWeek(SysUtils.Date)];
if sHint<>'' then sHint:=sHint+'^^'; for i:=sgHint.RowCount - downto do //计算文字行数
if sgHint.Cells[,i]<>'' then
begin
n:=i;
Break;
end; for i:= to n do //填加文字
sHint:=sHint+sgHint.Cells[,i]+'^^'; n:=ItemsOfStr(sHint,'^^');
//img.Canvas.Font.Size:=24; //max(24,img.Height div 20) ;//==字体大小
img.Canvas.Font:=plHintFont.Font; h:=img.Canvas.TextHeight('jy');
{while h*10>img.Height do
begin
img.Canvas.Font.Size:=img.Canvas.Font.Size-1;
if img.Canvas.Font.Size<10 then Break;
h:=img.Canvas.TextHeight('jy');
end; }
//h:=img.Canvas.TextHeight('jy');
size:=img.Canvas.Font.Size;
SetFontSmooth(True); //设置文字平滑绘制 sFmt:=FontToStr(plHintFont.font)+';~~'+colortostr(pledgeColor.Font.Color)+';~~'+inttostr(spedgeWidth.Value);//合成特定格式
ShowFmtTxt(img.Canvas,' ~~0~~0~~0~~'+sFmt,'');
for i:= to min(n,) do //最多显示11行提示文字
begin
s2:=TextOfIndex(sHint,'^^',i);
s2:=Trim(s2);
w:=img.Canvas.TextWidth(s2);
s:='~~'+inttostr(img.Width-w-)+'~~'+intTostr(i*h-h);
// s:=s+'~~0~~楷体_BG2312;'+inttostr(h)+';255;255;255;fsItalic~~16;16;16;~~1';
s:=s+'~~0~~'+sFmt;
ShowFmtTxt(img.Canvas,s2+s,'');
if chkSHowLine.Checked then
DrawLineH3(img.Width-w-,i*h-,w,img.Canvas,plLineColor.Font.Color,dRight);
end;
SetFontSmooth(oldTFONTSMOOTHING); //恢复原来的文字平滑方式
end;
Procedure TFrmPlay.SetRegWallPaper(StrFile:String);
Var Reg:TRegistry;
begin
Reg:=Tregistry.Create;{创建Tregistry对象的实例}
Reg.Rootkey:= Hkey_Current_User;{设置根键名称}
try
if Reg.OpenKey('Control Panel\Desktop',False) then {打开Control Panel\Desktop 路径对应的主键}
begin
//ShowMessage('打开注册表成功');
Reg.WriteString('TileWallPaper','');
Reg.WriteString('WallpaperStyle','');
Reg.WriteString('Wallpaper',StrFile);{向TileWallpaper 和Wallpaper串覆盖写入新值}
Reg.WriteString('ConvertedWallpaper',StrFile);
Reg.WriteString('OriginalWallpaper',StrFile);
Reg.CloseKey;{将更改内容写入注册表并关闭}
Systemparametersinfo(SPI_SETDESKWallpaper,,Pchar(StrFile),
SPIF_upDateINIFIle Or SPIF_SENDWININICHANGE); // or SPIF_SendChange);{向Windows发送消息,通知Windows更换壁纸}
end;
finally
Reg.Free;
end;
end;
SetRegWallPaper通知windows改变壁纸
Procedure TFrmPlay.SetWallPaper(StrFile: String; Style: Integer);
Var DT: IActiveDesktop;
WPO: TWallpaperOpt;
WS: WideString;
begin
DT := CreateComObject(CLSID_ActiveDesktop) As IActiveDesktop;
WS := StrFile;
Case Style Of
: WPO.dwStyle := WPSTYLE_CENTER; {居中}
: WPO.dwStyle := WPSTYLE_TILE; {平铺}
: WPO.dwStyle := WPSTYLE_STRETCH; {拉伸}
else WPO.dwStyle := WPSTYLE_CENTER;
end;
WPO.dwSize := SizeOf(WPO);
DT.SetWallpaperOptions(WPO, );
DT.SetWallPaper(PwideChar(WS),);
DT.ApplyChanges(AD_APPLY_ALL);
end;
SetWallPaper用指定方式改变壁纸
字体和壁纸合并后再更改壁纸--《用delphi开发共享软件》-15.2桌面提示器的更多相关文章
- 103041000997维护的是周批,按周合并后再考虑最小采购批量、舍入值、然后回写到SAP系统
描述:103041000997维护的是周批量,但最终没有按周批量来回写数据. 业务逻辑如下: 1.净需求考虑数量按周汇总(也有按日.按3天,具体 要根据物料主数据维护来判断) 2.第1点的结果再加上安 ...
- 怎么实时同步java虚拟机与操作系统时区 及JVM启动后再更改操作系统时区或时间也能保持其同步? new date() 时差8个小时的解决方案
第一种(亲测可以) 在代码当中的Application启动类当中加入代码 @PostConstruct void started() { //时区设置:中国上海 //time.zone: " ...
- NSIS脚本:更改壁纸
原文 NSIS脚本:更改壁纸 我们在制作主题安装包的时候,经常要进行自动更改壁纸的操作,其实用NSIS实现这一点非常简单.示例代码如下: 01 Name "更改壁纸" 02 Out ...
- Launcher3自定义壁纸旋转后拉伸无法恢复
MTK8382/8121平台. 描述:将自定义图片设置成壁纸后,横屏显示时,旋转为竖屏,图片由于分辨率过小,会拉伸:再旋转为横屏,拉伸不恢复. 这两天正在解这个问题,研究了很久,走了不少弯路,最后发现 ...
- android 对一个合并后的联系人选择编辑,手机屏幕会缓慢变暗后再进入编辑界面的问题
1. 手机上有一个合并过的联系人 2. 编辑合并后的联系人 3. 手机屏幕会缓慢变暗之后再进入编辑界面. 首先找到contacts源码包下的EditContactA ...
- kylin的clube合并后清理hbase中产生的相关历史表
kylin的clube合并后清理hbase中产生的相关历史表 kylin 的clube 历史的每次构建,都会产生一个hbase的表:虽然可以设置按照一定策略合并,但是合并后hbase 历史表不会被自动 ...
- IOS中录音后再播放声音太小问题解决
1.AVAudioSessionCategory说明 1.1 AVAudioSessionCategoryAmbient 或 kAudioSessionCategory_AmbientSound 用于 ...
- 工作总结 1 sql写法 insert into select from 2 vs中 obj文件和bin文件 3 npoi 模板copy CopySheet 最好先全部Copy完后 再根据生成sheet写数据 4 sheet.CopyRow(rowsindex, rowsindex + x); 5 npoi 复制模板如果出现单元格显示问题
我们可以从一个表中复制所有的列插入到另一个已存在的表中: INSERT INTO table2SELECT * FROM table1; 或者我们可以只复制希望的列插入到另一个已存在的表中: INSE ...
- git不能先commit后再pull
本文首发hilsion的博客 今天遇到一个在使用git上的一个误区.具体的问题现象是: 我commit后再pull而不能在本地合并的情况,结果导致我的commit直接把同事的修改覆盖了.因为相对于我此 ...
随机推荐
- MyEclipse8.5破解方法
本文是转自其它博文,用以留着备份的~ Step: 1.建立一个任意名称的Java Project 2.在该工程中建立一个名文MyEclipseGen的Java文件(MyEclipseGen.java) ...
- 在DB2 for z/os上创建指定pagesize的数据库
ASNTDIFF的diff table有一列类型为varchar 15000,z上创建db默认的pagesize是4K,无法创建table,所以需要创建一个大pagesize的database. db ...
- (编辑器)Jquery-EasyUI集合Kindeditor编辑器
1.在html里面添加 list.html list.html (function ($, K) { if (!K) throw "KindEditor未定义!"; functio ...
- jQuery - 4.简单选择器
4.1 简单选择器 (1) :first 选取第一个元素. (2) :last 选取最后一个元素. (3) :not(选择器) 选取不满足"选择器"条件的元素 (4) ...
- 与你相遇好幸运,Sail.js创建.sailsrc文件
在项目根目录下创建.sailsrc文件 { "generators": { "modules": {} }, "hooks": ...
- git 使用技巧
让git不检测文件权限 在android根目录执行:repo forall -c git config core.filemode false即可 修改默认编辑器: git config –globa ...
- eclipse中的任务标记(TODO、FIXME、XXX)
eclipse Task Tags: TODO -用来提醒该标识处的代码有待返回继续编写.更新或者添加.该标签通常在注释块的源文件顶部. FIXME -该标签用来提醒你代码中存在稍后某个时间需要修改的 ...
- Pyqt清空Win回收站
Pyqt清空回收站其实的调用Python的第三方库,通过第三方库调用windows的api删除回收站的数据 一. 准备工作 先下载第三方库winshell 下载地址: https://github.c ...
- <转>ORA-06413 连接未打开错误
ORA-06413 Connection not open.Cause: Unable to establish connection.Action: Use diagnostic procedure ...
- C# SMTP邮件发送 分类: C# 2014-07-13 19:10 334人阅读 评论(1) 收藏
邮件发送在网站应用程序中经常会用到,包括您现在看到的博客,在添加评论后,系统会自动发送邮件通知到我邮箱的,把系统发送邮件的功能整理了下,做了一个客户端Demo,希望对有需要的童鞋有所帮助: 核心代码: ...