我有一个用 Delphi 2010 制作的软件,它需要由两个不同的部门使用,它们共享相同的数据和相同的 UI,除了一些更改,如隐藏/添加按钮、表单和网格列。因此,需要具有相同应用程序的两个版本。
无法在应用程序启动时提示用户选择部门我必须使用单独的 EXE。
在 Delphi 2010 或 XE3(稍后会升级)中做到这一点的最佳方法(概念)是什么?是否可以使用不同的 exe 名称进行编译?
我有一个用 Delphi 2010 制作的软件,它需要由两个不同的部门使用,它们共享相同的数据和相同的 UI,除了一些更改,如隐藏/添加按钮、表单和网格列。因此,需要具有相同应用程序的两个版本。
无法在应用程序启动时提示用户选择部门我必须使用单独的 EXE。
在 Delphi 2010 或 XE3(稍后会升级)中做到这一点的最佳方法(概念)是什么?是否可以使用不同的 exe 名称进行编译?
听起来像是一场维护噩梦,所以请考虑其他解决方案,例如登录或设置文件等评论中建议的解决方案。
如果您确实想制作单独的 exe,那么您可以使用编译器定义并基于代码的定义/排除部分:
添加新配置:
将定义添加到配置中:
在代码中使用定义:
{$IFNDEF ADVANCED}
// Remove Event Handler
Button1.OnClick := nil;
// Hide Button
Button1.Visible := False;
{$ENDIF}
我可以想到几个解决方案:
为您的发布应用程序提供一个 INI 文件(或在客户端计算机上创建一个注册表项)以指定/确定您的应用程序服务于哪个部门。TIniFile
然后通过或读取值TRegistry
。例如一个 INI 文件 ( MyApp.ini
):
[选项]
部门=销售
为您的程序创建一个快捷方式并使用参数,例如"MyApp.exe /sales"
或"MyApp.exe /support"
(ParamStr(1)
将告诉您它是否/sales
与/support
部门相关)
使用 2 个单独的项目文件,并在每个项目选项中定义您的Conditionals
指令,例如SALES
or SUPPORT
,然后在您的代码中使用{$IFDEF SALES}...{$ENDIF}
- 使用此选项完全重建所有项目单元非常重要。(我有一个预构建脚本,它会在编译之前删除项目 *.dcu 文件)。
您需要在您的应用程序中设置权限系统,该系统可以针对不同的组和配置文件进行定制,并且您可以为将使用该应用程序的所有最终用户分配角色或特定权限,您可以自己开发,也可以依赖第三方,如TMS 安全系统
一种可能的做法是制作第一个项目。做你的申请。
然后在同一个文件夹中创建第二个项目,并将第一个项目中的所有单元添加到该项目中。
现在在您的第二个项目中,如果您只需要小的更改,例如,您可以从您的第一个项目中的主窗体派生一个新类,并将更改放在上面。
这样你就有 2 个 exe,但有一个共享的代码库。