Delphi5利用DLL实现窗体的重用

文章目录

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

效果图

参考

利用DLL实现窗体的重用

在 Delphi 5 中,通过 DLL(动态链接库)实现窗体的重用是一种高级技术,它允许你在多个应用程序之间共享窗体代码。这通常用于减少代码冗余,提高开发效率,并允许模块化设计。

步骤1 设计出理想窗体

像平时一样设计一个窗体,调试运行成功。

s 复制代码
{将左边选中的移到右边}
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i:=ListBox1.Items.Count-1 downto 0 do
  begin
    if ListBox1.Selected[i] then
    begin
      ListBox2.Items.Add(ListBox1.Items[i]);     //加到另外框
      ListBox1.Items.Delete(i);      //删除选中
    end;
  end;
end;

{将左边全部移到右边}
procedure TForm1.Button2Click(Sender: TObject);
var
  i: 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;
begin
  for i:=ListBox2.Items.Count-1 downto 0 do
  begin
    if ListBox2.Selected[i] then
    begin
      ListBox1.Items.Add(ListBox2.Items[i]);     //加到另外框
      ListBox2.Items.Delete(i);      //删除listbox中选中的
    end;
  end;
end;

{将右边全部移到左边}
procedure TForm1.Button4Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to ListBox2.Items.Count - 1 do
  begin
    ListBox1.Items.Add(ListBox2.Items[i]);
  end;
  ListBox2.Items.Clear;
end;

{点击确定}
procedure TForm1.Button5Click(Sender: TObject);
begin
  modalresult:=mrOK;
end;

{点击取消}
procedure TForm1.Button6Click(Sender: TObject);
begin
  modalresult:=mrCancel;
end;

步骤2 编写一个用户输出的函数或过程,在其中对窗体进行创建使它实例化

t 复制代码
var
  Form1: TForm1;
  function ListMove(var l1,l2:Integer):wordbool;export;   //让外部调用


{返回选中了几门课程}
function ListMove(var l1,l2:Integer):wordbool;
begin
  result:=False;
  Form1:=TForm1.create(Application); //调用这个DLL时,创建窗体(实例化)
  try
    if Form1.showmodal=mrOk then    //点击确定
    with Form1 do
    begin
      l1:=listbox1.items.count;
      l2:=listbox2.items.count;
      result:=True;
    end;
  finally
    Form1.free;
  end;
end;

步骤3 对工程文件进行相应的修改以适应DLL格式的需要

s 复制代码
//program Project1;
library Project1;

uses
//  Forms,   // 我们自己生成窗体
  Unit1 in 'Unit1.pas' {Form1};

//告诉编译器,我们输出的函数
exports
  ListMove;
{$R *.RES}

begin
//  Application.Initialize;
//  Application.CreateForm(TForm1, Form1);
//  Application.Run;
end.

步骤4 编译工程文件生成DLL文件

步骤5 在需要该窗体的其他应用程序中重用该窗体

d 复制代码
implementation

{$R *.DFM}

//调用DLL窗体文件声明
function ListMove(var l1,l2:Integer):wordbool;far;external 'Project1.dll'

{点击确定,调用DLL文件}
procedure TForm1.Button1Click(Sender: TObject);
var
  l1,l2:Integer;      //传地址过去,直接修改l1,l2
begin
  if ListMove(l1,l2) then
  begin
    Edit1.Text:=IntToStr(l1);
    Edit2.Text:=IntToStr(l2);
  end;
end;

通过这种方式,你可以有效地在多个 Delphi 应用程序之间重用窗体代码。

完整代码

强制卸载工具

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

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

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

相关推荐
代码游侠1 分钟前
嵌入式开发代码实践——串口通信(UART)开发
c语言·开发语言·笔记·单片机·嵌入式硬件·重构
没有梦想的咸鱼185-1037-16634 分钟前
AI大模型支持下的:R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表
开发语言·人工智能·机器学习·chatgpt·数据分析·r语言·ai写作
gihigo19986 分钟前
MATLAB中点扩散函数(PSF)的实现方案
开发语言·matlab
机器视觉知识推荐、就业指导10 分钟前
用 Qt 做商业软件,会不会“被迫开源”?
开发语言·qt·开源
智码未来学堂14 分钟前
C语言经典编程练习题(1)
c语言·开发语言
结衣结衣.18 分钟前
spdlog: 高性能C++日志库
开发语言·c++
それども20 分钟前
线程池阻塞队列选择ArrayBlockingQueue与LinkedBlockingQueue区别
java·开发语言·网络协议
沛沛老爹20 分钟前
从Web到AI:Agent Skills安全架构实战——权限控制与数据保护的Java+Vue全栈方案
java·开发语言·前端·人工智能·llm·安全架构·rag
Remember_99322 分钟前
文件系统与IO操作:深入解析与Java实践
java·开发语言·数据结构·ide·python·算法
a31582380623 分钟前
TCP/IP协议的概述和面试要点
开发语言·php