当前位置: 首页 > news >正文

Inno setup pascal编码下如何美化安装界面支持带边框,圆角,透明阴影窗口

        inno setup自带的安装界面太老套了,如何实现类似网易,微信那种带界面的安装?一般有两种思路:提供一个单独的下载器,然后通过下载器将你用innosetup 打包后的软件下载下来,然后,静默安装这个包;另外一个,就是将自带的安装界面全部隐藏掉,通过在pascal下利用botva2.dll和innocallback.dll两个文件定制安装界面。网上有很多讲述如何制作安装界面的,但很少有例子实现边框和阴影的,下面我说下我实现的方案。

一.窗口支持边框

        要使窗口支持边框,第一种方案就是背景用一张带边框的图片。当然,这种方法能实现,不是我想表达的。另外一种方案:用TPanel 贴图,然后窗口留白,窗口的背景颜色设置为边框设置的颜色。下面是主窗口WizardForm和背景留白控件TPanel的关键代码:

  WIZARDFORM_BORDER_WIDTH 设置为边框的宽度     

    // 初始化主窗口with WizardForm dobeginBorderStyle := bsNone;Position := poScreenCenter;Width := WIZARDFORM_WIDTH_NORMAL;Height := WIZARDFORM_HEIGHT_NORMAL;Color := $FFc7c7c7;NextButton.Height := 0;CancelButton.Height := 0;BackButton.Visible := FALSE;end;// 初始化主窗口背景mainBkPanel := TPanel.Create(WizardForm);mainBkPanel.Parent := WizardForm;mainBkPanel.ParentBackground := True;mainBkPanel.Top := WIZARDFORM_BORDER_WIDTH;mainBkPanel.Left := WIZARDFORM_BORDER_WIDTH;mainBkPanel.BorderStyle := bsNonemainBkPanel.Width := WIZARDFORM_WIDTH_NORMAL - WIZARDFORM_BORDER_WIDTH * 2;mainBkPanel.Height := WIZARDFORM_HEIGHT_NORMAL - WIZARDFORM_BORDER_WIDTH * 2;mainBkPanel.BevelKind := bkNone;mainBkPanel.BevelInner := bvNone;mainBkPanel.BevelOuter := bvNone;mainBkPanel.Visible := True;

二.窗口支持圆角阴影

        这个就简单点了,让UI设计一张带有圆角阴影的图片,然后,参照我上面设置边框的步骤,将宽度设置为0,将主窗口的WizardForm的Color设置为$00FFFFFF就完成了。但是,由于我们使用的是botva2.dll这个库,你会发现如果多次ImgLoad图片,窗口阴影会变的越来越深,这是由于,窗口句柄会随着你每次多load一次图片,背景图片会多贴一次,导致阴影加深了。还好这个库有一个图片释放接口ImgRelease,因此,你每次调用load之前调用release即可解决这个问题。

        下面是关键代码:

	ImgRelease(image_wizardform_background);image_wizardform_background := ImgLoad(mainBkPanel.Handle, ExpandConstant('{tmp}\bk_white1.png'), 0, 0, WIZARDFORM_WIDTH_NORMAL, WIZARDFORM_HEIGHT_NORMAL, FALSE, TRUE);ImgApplyChanges(mainBkPanel.Handle);ImgApplyChanges(WizardForm.Handle);

         

http://www.lryc.cn/news/409106.html

相关文章:

  • SQL语句(以MySQL为例)——单表、多表查询
  • C++第二十八弹---进一步理解模板:特化和分离编译
  • 正则表达式的独占模式,懒惰模式等有那些区别
  • 【INTEL(ALTERA)】Quartus® Prime Pro Edition 软件 v24.2 中,哪些 Agilex™ 5 IP 功能的硬件验证有限?
  • Lua编程
  • 2019数字经济公测大赛-VMware逃逸
  • 如何改桥接模式
  • 江科大/江协科技 STM32学习笔记P13
  • loadrunner录制解决提示安全问题
  • 为什么要读写分离?如何实现业务系统读写分离?
  • C#基础——类、构造函数和静态成员
  • hadoop学习(二)
  • WXZ196微机消谐装置的运行方式了解一下
  • 单链表的建立
  • Shell脚本编程学习
  • 从宏基因组量化细菌生长动态
  • Linux---git工具
  • 【JavaScript】函数的动态传参
  • 从0到1,AI我来了- (4)AI图片识别的理论知识-II
  • 2024 Java 高分面试宝典 一站式搞定技术面
  • MongoDB - 聚合操作符 $eq、$gte、$in、$sum、$avg
  • C语言 | Leetcode C语言题解之第279题完全平方数
  • 在appium中,如何通过匹配图片来进行断言?
  • 昇思25天学习打卡营第21天|CV-Shufflenet图像分类
  • python 图片转文字、语音转文字、文字转语音保存音频并朗读
  • SSRF (服务端请求伪造)
  • SQL中的LEFT JOIN、RIGHT JOIN和INNER JOIN
  • [网鼎杯 2020 朱雀组]Nmap(详细解读版)
  • 【React】详解“最新”和“最热”切换与排序
  • BUUCTF [MRCTF2020]Ezpop