热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

根据条件定义包含不同的表单(.dfm)文件

如何解决《根据条件定义包含不同的表单(.dfm)文件》经验,为你挑选了1个好方法。

我们为两个略有不同版本的机器生产两个版本的软件.两台机器上使用的硬件完全不同,我们维护了两个项目Project1和Project2.某些代码(.pas和.dfm,视情况而定)在两个项目之间共享,但大多数代码目前对Project1或Project2是唯一的.

最初从Project1克隆了Project2以使新机器正常运行,但现在我正在重构代码,因此可以在两个项目之间共享表单和单元以减少开发工作.{$IFDEF PROJ1}如果需要,可以使用条件定义.

我们有一个表单在项目之间几乎相同,除了一个TCheckBox,它在Project1中而不是Project2.让我们Masking用单元文件Masking.pas(和Masking.dfm)调用这个表单.

脚步:

将.pas和.dfm从Project1移动到公共共享文件夹中

将Masking.dfm重命名为MaskingProj1.dfm

将Project2中的Masking.dfm复制到公共共享文件夹中,并重命名为MaskingProj2.dfm

手动编辑每个项目的项目(.dpr)文件以反映更改

在Masking.pas中,改为{$R *.dfm}:

{$IFDEF PROJECT1} {$R MaskingProj1.dfm} {$ELSE} {$R MaskingProj2.dfm} {$ENDIF}

同样在Masking.pas中,使用{$IFDEF PROJECT1}条件定义来编译TCheckBox 控件和Project2的相关代码.

最后,重新打开两个项目并重新编译.嘿presto!有用.现在Project1使用Masking.pas和MaskingProj1.dfm.Project2使用Masking.pas和MaskingProj2.dfm.

这一切看起来都很好......除了当我尝试在IDE中查看表单时,通过在表单和单元之间切换(F12),不会显示任何内容.我可以手动编辑.dfm文件,重新编译后更改会反映在应用程序中......但IDE不会显示该表单.

我究竟做错了什么?是否有可能以{$R *.dfm}这种方式更改以使.pas文件使用不同的表单文件,具体取决于条件定义?



1> Uwe Raabe..:

这是表单继承的典型案例.

创建一个包含两个项目所需的所有控件的公共祖先表单.现在为Project1继承此表单并添加仅为Project1所需的控件.然后为Project2做同样的事情(可能没有在这里添加的控件).

两个项目都包含公共表单,但每个项目仅包含适用于所述项目的继承表单.

虽然你可以在这里省略Project2的继承表单,但为了清楚起见,我建议这样做.


推荐阅读
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 博主从零开始学习HTML(入门基础)
    从零开始学习HTML(入门基础)互联网三大基石HTTP协议URL:统一资源定位符HTML:超文本标记语言HTML的Head标签中的常用元素<!--告知 ... [详细]
  • 本文详细介绍了如何使用JavaScript实现数据的双向绑定,包括MVVM架构的基本概念、不同框架下的实现方式以及具体的代码示例。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文深入探讨了 Java 编程语言的基础,特别是其跨平台特性和 JVM 的工作原理。通过介绍 Java 的发展历史和生态系统,帮助初学者理解如何编写并运行第一个 Java 程序。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文详细介绍了MicroATX(也称Mini ATX)和MATX主板规格,探讨了它们的结构特点、应用场景及对电脑系统成本和性能的影响。同时,文章还涵盖了相关操作系统的实用技巧,如蓝牙设备图标删除、磁盘管理等。 ... [详细]
  • ###问题删除目录时遇到错误提示:rm:cannotremoveusrlocaltmp’:Directorynotempty即使用rm-rf,还是会出现 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
  • 使用DetailsView控件实现数据分页显示
    本文介绍了如何利用DetailsView控件结合数据源,在ASP.NET页面中实现数据的分页显示功能。 ... [详细]
  • 利用HTML5 Canvas高效构建电信网络拓扑图
    电信网络拓扑图在实际应用中具有很高的实用价值。本文介绍了一个基于HTML5 Canvas的电信网络拓扑图项目,不仅实现了基本的图形展示功能,还加入了自动布局和属性栏功能,使项目更加完善。此Demo经过细微调整即可直接应用于实际项目中。 ... [详细]
author-avatar
手机用户2502879747
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有