Delphi5利用DLL实现窗体的重用
文章目录
- 效果图
- 参考
- 利用DLL实现窗体的重用
- 步骤1 设计出理想窗体
- 步骤2 编写一个用户输出的函数或过程,在其中对窗体进行创建使它实例化
- 步骤3 对工程文件进行相应的修改以适应DLL格式的需要
- 步骤4 编译工程文件生成DLL文件
- 步骤5 在需要该窗体的其他应用程序中重用该窗体
- 完整代码
- 强制卸载工具
效果图

参考
利用DLL实现窗体的重用
在 Delphi 5 中,通过 DLL(动态链接库)实现窗体的重用是一种高级技术,它允许你在多个应用程序之间共享窗体代码。这通常用于减少代码冗余,提高开发效率,并允许模块化设计。
步骤1 设计出理想窗体
像平时一样设计一个窗体,调试运行成功。

{将左边选中的移到右边}
procedure TForm1.Button1Click(Sender: TObject);
vari: Integer;
beginfor i:=ListBox1.Items.Count-1 downto 0 dobeginif ListBox1.Selected[i] thenbeginListBox2.Items.Add(ListBox1.Items[i]); //加到另外框ListBox1.Items.Delete(i); //删除选中end;end;
end;{将左边全部移到右边}
procedure TForm1.Button2Click(Sender: TObject);
vari: Integer;
begin// 遍历ListBox1中的所有项for i := 0 to ListBox1.Items.Count - 1 do begin // 将ListBox1中的项添加到ListBox2中 ListBox2.Items.Add(ListBox1.Items[i]); end; // 如果你希望清空ListBox1,可以在这里执行 ListBox1.Items.Clear;
end;{将右边选中的移到左边}
procedure TForm1.Button3Click(Sender: TObject);
var i: Integer;
beginfor i:=ListBox2.Items.Count-1 downto 0 dobeginif ListBox2.Selected[i] thenbeginListBox1.Items.Add(ListBox2.Items[i]); //加到另外框ListBox2.Items.Delete(i); //删除listbox中选中的end;end;
end;{将右边全部移到左边}
procedure TForm1.Button4Click(Sender: TObject);
vari: Integer;
beginfor i := 0 to ListBox2.Items.Count - 1 dobeginListBox1.Items.Add(ListBox2.Items[i]);end;ListBox2.Items.Clear;
end;{点击确定}
procedure TForm1.Button5Click(Sender: TObject);
beginmodalresult:=mrOK;
end;{点击取消}
procedure TForm1.Button6Click(Sender: TObject);
beginmodalresult:=mrCancel;
end;
步骤2 编写一个用户输出的函数或过程,在其中对窗体进行创建使它实例化
varForm1: TForm1;function ListMove(var l1,l2:Integer):wordbool;export; //让外部调用{返回选中了几门课程}
function ListMove(var l1,l2:Integer):wordbool;
beginresult:=False;Form1:=TForm1.create(Application); //调用这个DLL时,创建窗体(实例化)tryif Form1.showmodal=mrOk then //点击确定with Form1 dobeginl1:=listbox1.items.count;l2:=listbox2.items.count;result:=True;end;finallyForm1.free;end;
end;
步骤3 对工程文件进行相应的修改以适应DLL格式的需要
//program Project1;
library Project1;uses
// Forms, // 我们自己生成窗体Unit1 in 'Unit1.pas' {Form1};//告诉编译器,我们输出的函数
exportsListMove;
{$R *.RES}begin
// Application.Initialize;
// Application.CreateForm(TForm1, Form1);
// Application.Run;
end.
步骤4 编译工程文件生成DLL文件


步骤5 在需要该窗体的其他应用程序中重用该窗体
implementation{$R *.DFM}//调用DLL窗体文件声明
function ListMove(var l1,l2:Integer):wordbool;far;external 'Project1.dll'{点击确定,调用DLL文件}
procedure TForm1.Button1Click(Sender: TObject);
varl1,l2:Integer; //传地址过去,直接修改l1,l2
beginif ListMove(l1,l2) thenbeginEdit1.Text:=IntToStr(l1);Edit2.Text:=IntToStr(l2);end;
end;
通过这种方式,你可以有效地在多个 Delphi 应用程序之间重用窗体代码。
完整代码
在这。

强制卸载工具
最近安装Adobe时,它顺带安装了一个McAFee,结果删的时候,只显示一部分,无法点击卸载按钮。

去官网找客户服务,他推荐了一个工具。很不错,能强制卸载,顺带清理其所有文件。

工具界面很整洁,使用简单方便。

相关文章:
Delphi5利用DLL实现窗体的重用
文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程,在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…...
使用JavaWeb开发注册功能时,校验用户名是否已存在的一个思路(附代码)
在开发 Web 应用程序时,用户注册是一个常见的功能。为了确保每个用户都有一个唯一的用户名,我们需要在用户注册时检查数据库中是否已经存在该用户名。本文将详细介绍如何在 Servlet 中使用 JDBC 技术来检查用户名是否存在。 1. JDBC 简介 Java Databas…...
前端常见面试-首页性能提升、项目优化
首页性能提升 Vue 首页性能提升是Vue应用开发中非常重要的一环,它直接影响用户体验和应用的加载速度。以下是一些关键的Vue首页性能提升策略: 1. 代码分割与懒加载 路由懒加载:利用Webpack的动态导入(import())特性…...
卷王阿里又开启价格战,大模型价格降价85%!
我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 9月19日,就是昨天,一年一度的云计算盛…...
Java中的异步编程模式:CompletableFuture与Reactive Programming的实战
Java中的异步编程模式:CompletableFuture与Reactive Programming的实战 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代Java开发中,异步编程已经成为提高应用性能和…...
7iDU AMP田岛绣花机驱动器维修0J2100400022
7iDU AMP神州田岛绣花机驱动器维修0J2101300000绣花机控制器等全系列型号均可处理。 田岛7iDU AMP是田岛绣花机中使用很广的一种5相驱动器,在田岛平绣车TMEF-H,TMFD中应用,在链条车TMCE112S,和盘带车TMLG中大量使用。其采用的东芝…...
部署自己的对话大模型,使用Ollama + Qwen2 +FastGPT 实现
部署资源 AUTODL 使用最小3080Ti 资源,cuda > 12.0使用云服务器,部署fastGPT oneAPI,M3E 模型 操作步骤 配置代理 export HF_ENDPOINThttps://hf-mirror.com下载qwen2模型 - 如何下载huggingface huggingface-cli download Qwen/Qwen2-…...
vue websocket 使用
基于webSocket通信的库主要有 socket.io,SockJS 关于SockJS的使用 先安装 sockjs-client 和 stompjs npm install sockjs-client npm install stompjs import SockJS from sockjs-client; import Stomp from stompjs; export default { data () { …...
Spring Boot 入门面试五道题
在准备Spring Boot面试时,从简单到困难设计面试题可以帮助你系统地复习和评估自己的掌握程度。以下是五个不同难度的Spring Boot面试题: 1. 简单题:什么是Spring Boot?它主要解决了什么问题? 答案: Sprin…...
【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上)
文章目录 前言一、ArkTS基本介绍1、 ArkTS组成2、组件参数和属性2.1、区分参数和属性的含义2.2、父子组件嵌套 二、装饰器语法1.State2.Prop3.Link4.Watch5.Provide和Consume6.Observed和ObjectLink代码示例:示例1:(不使用Observed和ObjectLi…...
国产品牌 KTH1701系列 高性能、低功耗、全极磁场检测霍尔开关传感器
国产品牌 KTH1701系列 高性能、低功耗、全极磁场检测霍尔开关传感器 概述: KTH1701 是一款低功耗霍尔开关传感器,专为空间紧凑系统和电池电量敏感系统而设计。该芯片可以提供多种磁场阈值、开关工作频率和封装形式以适配各种应用。 当施加的S 极或 N 极…...
如何不终止容器退出Docker Bash会话
如何不终止容器退出Docker Bash会话 💖The Begin💖点点关注,收藏不迷路💖 当通过docker exec进入Docker容器的bash会话后,如果想退出但不停止容器,可以使用快捷键组合: 按下Ctrl+P然后紧接着按下Ctrl+Q。 这个操作会让你从bash会话中“分离”出来,但容器会继续运行…...
杰理芯片各型号大全,方案芯片推荐—云信通讯
29₤vFG537sTUWr《 https://s.tb.cn/h.gJ4LjAH CZ0016 杰理芯片 杰理芯片各型号大全,方案芯片推荐 https://shop.m.taobao.com/shop/shopIndex.htm?shop_id498574364&bc_fl_srctbsms_crm_3928605685_deliver$2553947245685_10973444242...
解决服务器首次请求异常耗时问题
1. 问题描述 在我们的图像识别API服务中,我们遇到了一个棘手的问题:服务器在首次接收请求时,响应时间异常地长,经常导致超时错误。这不仅影响了用户体验,还可能导致系统不稳定。 现象: 测试接口在首次调用时出现超时后续请求则能正常响应复现方法: 只需在服务重启后或长时间…...
VS code 创建与运行 task.json 文件
VS code 创建与运行 task.json 文件 引言正文创建 .json 文件第一步第二步第三步 运行 .json 文件 引言 之前在 VS code EXPLORER 中不显示指定文件及文件夹设置(如.pyc, pycache, .vscode 文件) 一文中我们介绍了 settings.json 文件,这里我…...
【电商API接口定价】618品牌定价参考(电商API接口数据采集)
价格是618狂欢节最为核心的存在,定价也成为品牌至关重要的环节。为了制定合理的价格策略,品牌和商家可以利用电商API接口进行数据采集,以获取更准确的市场信息和竞争态势。而电商API究竟可以帮助品牌如何定价呢? 首先,…...
PyRFC 适用于 Python 的异步、非阻塞 SAP NetWeaver RFC SDK 绑定
Asynchronous, non-blocking SAP NetWeaver RFC SDK bindings for Python. 适用于 Python 的异步、非阻塞 SAP NetWeaver RFC SDK 绑定 Call for Maintainers This project is currently looking for new maintainers. Please see this issue for details. Features Client …...
解决matplotlib画中文时缺乏中文字体问题。
https://www.cnblogs.com/oboth-zl/p/15152508.html 手动安装字体: Debian 和 Ubuntu 下对中文支持比较好的字体有: fonts-droid、ttf-wqy-zenhei 和 ttf-wqy-microhei 等,除了文泉驿系列字体外,比较流行的免费中文字体还有文鼎提…...
小琳AI课堂 掌握强化学习:探索OpenAI Gym的魅力与Python实战
大家好,这里是小琳AI课堂。今天我们来聊聊OpenAI Gym,一个强大的强化学习(Reinforcement Learning, RL)工具包。🌟 OpenAI Gym,由人工智能研究实验室OpenAI创建,为强化学习的研究和开发提供了一…...
1.3 等价类划分法
欢迎大家订阅【软件测试】 专栏,开启你的软件测试学习之旅! 文章目录 前言1 单功能2 等价划分法3 测试步骤3.1 分析需求3.2 设计测试点3.3 将测试点转为可执行用例文档3.4 执行测试3.5 缺陷管理 前言 在现代软件开发中,确保核心功能的有效性…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
