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.mzph.cn/bicheng/51557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CPU、GPU等处理器介绍

CPU、GPU、IPU、NPU、TPU、LPU、MCU、MPU、SOC、DSP、FPGA、ASIC、GPP、ECU、_c_limengshi138392-GitCode 开源社区

Mybatis-Plus-常用的注解:@TableName、@TableId、@TableField、@TableLogic

1、TableName 经过之前的测试,在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在Mapper接口继承BaseMapper时,设置了泛型User,而操作的表为user表由此得出结论,MyBatis-Plus在确定操作…

Python:随机数、随机选择的应用

step1:导入 导入的random相当于是创建了random文件里的的一个对象 import random random() 产生0~1随机数 randint(a,b)产生a~b的整数 闭区间,可以取到a,b random.choice(touple_name)从touple_name(数组、列表..)中随机选择元素 import rand…

技术周总结 2024.07.22~07.28周日(Java Tidb Mysql)

文章目录 一、 07.23 周二1.1)问题01:下面的java代码会发生NPE吗?String aa "ss: "; String bb null; aa bb;解释完整示例输出总结 1.2)问题02:Spring注解ControllerAdvice 具体的使用方法1.3) 问题03&am…

Java人力资源招聘社会校招类型招聘小程序

✨💼【职场新风尚!解锁人力资源招聘新神器:社会校招类型招聘小程序】✨ 🎓【校招新体验,一键触达梦想企业】🎓 还在为错过校园宣讲会而懊恼?别怕,社会校招类型招聘小程序来救场&am…

日常进度提醒

今日进行学习的时联合和枚举,加油!

L2TP VPN

目录 一、实验目的 二、实验环境 三、实验内容 1、实验规划: 2、关键内容: 3、实施步骤: 四、实验总结 一、实验目的 1、了解L2TP的实现原理; 2、掌握Client-Initiated场景下的L2TP的配置。 二、实验环境 华为eNSP模拟器…

pytest 测试框架中 setup、teardown 方法不生效

pytest 测试框架中 setup、teardown 方法不生效 源码有改动: 将 setup、teardown改为:setup_method、teardown_method 可生效 def setup_method(self):print("测试用例执行前的初始化,如:打开浏览器,加载网页...")def setup_class…

MybatisPlus(一)

目录 入门: 使用MybatisPlus的基本步骤: 常见注解 常见配置 总结 核心功能 条件构造器 自定义SQL Service接口 IService接口基本用法 IService的Lambda查询 IService的Lambda更新 IService批量新增 入门: 使用MybatisPlus的基本步…

Flink CDC基本概念以及MySQL同步到MySQL

目录 欢迎来到Flink CDC 核心概念 数据管道(Data Pipeline) 数据源(Data Source) 数据接收器(Data Sink) 表ID(Table ID) 转换(Transform) 路由(Route) 连接器(connectors) 管道连接器(pipeline connectors) 支持连接器 开发自己的连接器 Flink源…

WebSocket程序设计

协议说明 WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。Websocket主要用在B/S架构的应用程序中,在 WebSocket API 中,浏览器和服务器只…

[算法题]装箱问题

题目链接: 装箱问题 1. 动态规划(0、1背包问题) 2. 定义状态表示:dp[i][j] 表示在 1 - i 个物品中,选出不超过容量为 j 的物品的最大体积是多少。 3. 状态转移方程: 1)不选第 i 个物品:dp[i]…

2024全面解析:从零基础到精通的大模型学习路线,非常详细零基础入门到精通,收藏我这一篇就够了

大模型学习路线规划 第一阶段:基础理论入门 目标:了解大模型的基本概念和背景。 内容: 人工智能演进与大模型兴起。 大模型定义及通用人工智能定义。 GPT模型的发展历程。 第二阶段:核心技术解析 目标:深入学习大模…

C++ primer plus 第16章string 类和标准模板库, 函数和容器方法

C primer plus 第16章string 类和标准模板库, 函数和容器方法 C primer plus 第16章string 类和标准模板库, 函数和容器方法 文章目录 C primer plus 第16章string 类和标准模板库, 函数和容器方法16.6.4 函数和容器方法程序清单 16.18 16.6.4 函数和容器方法 有时可以选择使…

python 图片转文字、语音转文字、文字转语音保存音频并朗读

一、python图片转文字 1、引言 pytesseract是基于Python的OCR工具, 底层使用的是Google的Tesseract-OCR 引擎,支持识别图片中的文字,支持jpeg, png, gif, bmp, tiff等图片格式 2、环境配置 python3.6PIL库安装Google Tesseract OCR 3、安…

mac下通过brew安装mysql的环境调试

mac安装mysql 打开终端,运行命令(必须已经装过homebrew哦): 安装brewbin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"已安装brew直接运行:brew install mysql8.0报…

洛科威岩棉板在生产生活中广泛应用,以优秀表现实现隔热性能最大化

无论是在住宅领域还是工业生产领域,隔热保温都扮演着极其重要的角色,选用的材料是否足够出色,决定了大家居家生活的舒适度,以及生产过程中能耗的高低。近些年来,洛科威岩棉优秀的隔热性能逐渐得到了各行各业的青睐&…

HomeDepot commercedesk 平台EDI自测流程

Home Depot Canada 是一家全球知名的家居建材零售公司,在加拿大拥有多家分店。它是美国的家居建材零售巨头 Home Depot 在加拿大的子公司。Home Depot 主要销售各种家庭装修和建筑材料,包括工具、家具、装饰品、电器等。公司提供广泛的产品选择和专业的顾…

机器学习(二十四):信息增益、独热编码和回归树

一、纯度测量方式——熵 第一步,定义:一个子集里,某一类别的数据在子集中的占比 例如,下图这组输入数据,根据耳朵形状划分为两个子集,尖耳朵子集里,有四只猫,1只狗。则是4/5 第二步…

Pyppeteer 爬取实战

爬取目标 https://spa2.scrape.center/ 本节工作 遍历每页列表,获取每部电影详情页的 URL 爬取每部电影的详情页, 提取电影名称, 评分,类别,封面,简介等信息 将爬取的数据保存为 JSON数据 准备工作 安…