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桌面提示器的更多相关文章

  1. 103041000997维护的是周批,按周合并后再考虑最小采购批量、舍入值、然后回写到SAP系统

    描述:103041000997维护的是周批量,但最终没有按周批量来回写数据. 业务逻辑如下: 1.净需求考虑数量按周汇总(也有按日.按3天,具体 要根据物料主数据维护来判断) 2.第1点的结果再加上安 ...

  2. 怎么实时同步java虚拟机与操作系统时区 及JVM启动后再更改操作系统时区或时间也能保持其同步? new date() 时差8个小时的解决方案

    第一种(亲测可以) 在代码当中的Application启动类当中加入代码 @PostConstruct void started() { //时区设置:中国上海 //time.zone: " ...

  3. NSIS脚本:更改壁纸

    原文 NSIS脚本:更改壁纸 我们在制作主题安装包的时候,经常要进行自动更改壁纸的操作,其实用NSIS实现这一点非常简单.示例代码如下: 01 Name "更改壁纸" 02 Out ...

  4. Launcher3自定义壁纸旋转后拉伸无法恢复

    MTK8382/8121平台. 描述:将自定义图片设置成壁纸后,横屏显示时,旋转为竖屏,图片由于分辨率过小,会拉伸:再旋转为横屏,拉伸不恢复. 这两天正在解这个问题,研究了很久,走了不少弯路,最后发现 ...

  5. android 对一个合并后的联系人选择编辑,手机屏幕会缓慢变暗后再进入编辑界面的问题

    1.       手机上有一个合并过的联系人 2.       编辑合并后的联系人 3.       手机屏幕会缓慢变暗之后再进入编辑界面. 首先找到contacts源码包下的EditContactA ...

  6. kylin的clube合并后清理hbase中产生的相关历史表

    kylin的clube合并后清理hbase中产生的相关历史表 kylin 的clube 历史的每次构建,都会产生一个hbase的表:虽然可以设置按照一定策略合并,但是合并后hbase 历史表不会被自动 ...

  7. IOS中录音后再播放声音太小问题解决

    1.AVAudioSessionCategory说明 1.1 AVAudioSessionCategoryAmbient 或 kAudioSessionCategory_AmbientSound 用于 ...

  8. 工作总结 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 ...

  9. git不能先commit后再pull

    本文首发hilsion的博客 今天遇到一个在使用git上的一个误区.具体的问题现象是: 我commit后再pull而不能在本地合并的情况,结果导致我的commit直接把同事的修改覆盖了.因为相对于我此 ...

随机推荐

  1. eclipse maven新建springMVC项目(原创)

    1.配置eclipse maven 2.新建maven项目 3.新建src/main/java,更新pom <project xmlns="http://maven.apache.or ...

  2. 模拟赛1029d1

    第二题[题目描述]给你两个日期,问这两个日期差了多少毫秒.[输入格式]两行,每行一个日期,日期格式保证为"YYYY-MM-DD hh:mm:ss"这种形式.第二个日期时间一定比第一 ...

  3. python基础——继承和多态

    python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...

  4. IOS中定时器NSTimer的开启与关闭

    调用一次计时器方法: myTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scro ...

  5. Java——Cookie与Session

    Cookie通过客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 1.Cookie  1.1概念及使用方法 Cookie实际上是一小段文本信息.客户端请求服务器,如果服务 ...

  6. 20145206《Java程序设计》实验三实验报告

    20145206<Java程序设计>实验三实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运 ...

  7. AngularJS 简介、指令、表达式

    AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面. AngularJS 通过指令扩展了 HTML,且通过表达式绑定数据到 HT ...

  8. Git撤销提交和修改相关操作

    团队开发中经常遇到错误删除文件,错误提交等情况,那么使用Git该如何正确的进行撤销和恢复呢? 一.增补提交 git commit –C HEAD –a --amend -C表示复用指定提交的提交留言, ...

  9. 通过url获取图片尺寸的几种方法:JS和php

    首先是js的方法,通过new一个Image对象,设置src属性,并监听complete和onload事件,图片加载完成后输出图片的宽度和高度 function checkPicurl(url){ va ...

  10. 【JAVA网络流之TCP与UDP 】

    一.ServerSocket java.lang.Object |-java.net.ServerSocket 有子类SSLServerSocket. 此类实现服务器套接字.服务器套接字等待请求通过网 ...