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. ssh自动登陆

    突然碰到有人问ssh再传输密钥时候能不手动输入密码,由于没有碰到过这种情况,所以查了一下发现可以用sshpass做到. sshpass [参数] ssh命令: 参数: -p password  #将参 ...

  2. ZendStudio如何汉化

    点击工具栏的help,看图 点击 Install New Sofaware...   看图 然后.... 在地址(12.0的版本):http://download.eclipse.org/techno ...

  3. VS VA助手补丁覆盖目录

    以VS2010为例. VA_X.dll 复制到以下文件夹内,覆盖原文件. WinXP系统: %USERPROFILE%\Local Settings\Application Data\Microsof ...

  4. ios滑动手势全屏(这段代码实现了下一级控制器滑到上一级控制器)

    在自定义导航控制器里面加以下代码就增加全屏滑动手势 >推向前一个控制器 //  HBNavigationController.m // #import "HBNavigationCon ...

  5. c_test

    1.int a[][4]={0,0};与int a[3][4] = {0}; 元素不够的就以位模式初始化为0 a[第一维][第二维] 的大小,也就是最多存几个 int a[][3]={1,2,3,4, ...

  6. Java观察者模式(Observer模式)

    Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...

  7. React Native实例

    本文主要包括以下内容 View组件的实例 Text组件实例 Navigator组件实例 TextInput组件实例 View组件的实例 效果如下 代码如下 /** * Sample React Nat ...

  8. EF – 问题集锦

    1.对一个或多个实体的验证失败.有关详细信息,请参见“EntityValidationErrors”属性 在EF5.0修改实体的时候,出现“对一个或多个实体的验证失败.有关详细信息,请参见“Entit ...

  9. 【叉积】【sdut 2508 图形密码】

    图形密码 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/p ...

  10. 详细的JavaScript事件使用指南

       事件流 事件流描述的是从页面中接收事件的顺序,IE和Netscape提出来差不多完全相反的事件流的概念,IE事件流是事件冒泡流,Netscape事件流是事件捕获流. 事件冒泡 IE的事件流叫做事 ...