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

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,结果删的时候,只显示一部分,无法点击卸载按钮。

在这里插入图片描述

去官网找客户服务,他推荐了一个工具。很不错,能强制卸载,顺带清理其所有文件。
在这里插入图片描述

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

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JavaWeb笔记整理——Redis
  • java生成随机数的四种方法
  • wordpress主题摘要调用显示错误解决办法
  • docker镜像源
  • php curl发送get、post请求
  • NET WPF使用组件库HandyControl
  • 【推荐100个unity插件之34】在unity中实现和Live2D虚拟人物的交互——Cubism SDK for Unity
  • mac电脑命令行获取电量
  • oracle 如何查死锁
  • 软件测试之压力测试知识总结
  • Maven 的多种打jar包方式详细介绍、区别及使用教程——附使用命令
  • shell脚本语法
  • 硬件(驱动开发)
  • Python基础 | 在虚拟环境中安装并在指定文件夹中打开Jupyter notebook
  • Pycharm安装教程
  • .pyc 想到的一些问题
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Just for fun——迅速写完快速排序
  • October CMS - 快速入门 9 Images And Galleries
  • orm2 中文文档 3.1 模型属性
  • Ruby 2.x 源代码分析:扩展 概述
  • session共享问题解决方案
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring声明式事务管理之一:五大属性分析
  • Swift 中的尾递归和蹦床
  • 从零开始在ubuntu上搭建node开发环境
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 坑!为什么View.startAnimation不起作用?
  • 面试总结JavaScript篇
  • 前端性能优化--懒加载和预加载
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 《天龙八部3D》Unity技术方案揭秘
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​2020 年大前端技术趋势解读
  • #### go map 底层结构 ####
  • #pragma data_seg 共享数据区(转)
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (6)设计一个TimeMap
  • (k8s中)docker netty OOM问题记录
  • (PADS学习)第二章:原理图绘制 第一部分
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二) 初入MySQL 【数据库管理】
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (论文阅读30/100)Convolutional Pose Machines
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (转)visual stdio 书签功能介绍
  • (转)可以带来幸福的一本书
  • (转)重识new
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ****Linux下Mysql的安装和配置