现在,任何体面的Windows桌面应用程序都必须在以下条件下运行良好并且看起来很好:
哦,我的!什么是一个卑微的Windows桌面应用程序开发人员呢? :(
我希望得到一个关于如何处理这个GUI困境的建议的线程。
首先,我正在使用Delphi 7
a)Delphi 2010是否会带来任何新的东西来帮助解决这种情况?
b)我们应该选择一个售后组件套件并依靠它们来解决所有这些问题吗?
c)我们应该选择售后市场剥皮引擎吗?
d)或许可以使用更多HTML类型的GUI。我们可以使用不需要使用浏览器的HTML制作相对复杂的GUI应用程序吗? (更喜欢以形式为基础)
e)我们是否应该对这些场景中的每一个进行编码并进行编码并退出讨论呢?
f)最后,我们应该如何测试所有这些条件?
答案 0 :(得分:6)
目前我只想回答一个问题:
f)使用虚拟机和(如果可能)自动化测试。我知道这是一个很大的工作,但你永远不会后悔。
答案 1 :(得分:1)
我也是一个卑微的Windows开发人员(D7) - 对解决我的垂直市场应用程序用户的问题更感兴趣,而不是应对M $ foibles。
我拼凑了一个组件来解决所有这些问题以及更多问题。
据我所知,所有作品都属于公共领域,我尽可能将它归功于它们。
以下是一些属性:
型 TAppEnvironment = class(TComponent)
私有
{ Private declarations }
//环境管理
FEnvError : TEnvError; // environment error code
FEnvErrorMsg : string; // environment error message
FEnvLocalComputerName : string; // name of the client computer
FEnvCurrentUserName : string; // logged-on user
FEnvCurrentUserAdmin : Boolean; // is logged-on user Admin?
FEnvProduct : string; // windows edition
FEnvProductFlavour : string; // windows flavour (Home/Pro)
FEnvBuildNumber : string; // windows build number
FEnvServicePack : string; // windows service pack
FEnvThemeActive : Boolean; // Windows Theme active
//使用产品&主题
FEnvTitleHeight : integer; // window title height
FEnvMenuHeight : integer; // window menu height
FEnvStatusHeight : integer; // window status bar height
FEnvBorderHeight : integer; // window border height
FEnvMainHeight : integer; // main menu window height
FEnvMainWidth : integer; // main menu window width
FEnvHeightAdjust : integer; // window height adjust
FEnvWidthAdjust : integer; // window width adjust
FEnvLocalPath : string; // App exe home folder
FEnvAppFolderName : string; // application name less extension
FEnvAppFileVersionStr : string; // like 6.0.0.4567
FEnvAppFileVersion : TFileVersion; // HiVersion, LoVersion, etc.
还有一些实用程序:
function EnvironmentReady : TEnvError;
function GetLocalComputerName : string; // network needs this
function GetAppFolderName : string;
function BuildNumber : Integer;
procedure GetFileInfo(const AFileName: string; var RFileInfo: TFileInfo);
function GetLocalPath : string;
procedure getEnvWindowAdjust(bar : TStatusBar);
function setAppFileVersionStr : string;
function GetFileTime(const FileName: string): LongInt;
function initEnvironment : Boolean;
function exitEnvironment : Boolean;
function AlreadyRunning : Boolean;
function specialBuild : Boolean;
我有一个函数来正确调整每个表单的大小,使用FEnvTitleHeight等。
还会生成所有愚蠢的用户路径,具体取决于Windows版本。
我不清楚如何管理这个过程,但是如果人们想要,我会将整个事情扔进锅里 - 这样主人就可以完成它。
答案 2 :(得分:1)
很棒的问题。
我已经开发了我的应用程序超过10年,从Delphi 2,3和4开始然后呆在那里等待多年to upgrade to Delphi 2009,因为Unicode是必须的。当64位版本问世时,我会再次升级。
所以我已经运行了大量的操作系统:Windows 98,Windows 2000,XP,Vista和现在7.每个都会破坏你的用户界面,但是Delphi一直都很好。在某个时间点,您必须决定不再支持较旧的操作系统,并从支持的列表转移到Unicode finally cut out Windows 98。
通常,我发现核心Delphi为您提供最佳的UI支持。一些第三方软件包可能看起来提供更多,但它们的不一致性问题比它们的好处更糟糕。尽可能减少其他软件包的使用。
我所拥有的一个UI目标是使用Windows Vista徽标计划,以及最近的Windows 7程序,并Microsoft does provide a lot of information了解与您的条件1到7相关的标准应该是什么你的问题。但是让Delphi程序使用清单并经历微软的箍是最终的,不值得为我烦恼和成本,特别是因为我的不合规程序在Vista和7上运行得很好。
当我在64位Vista机器上进行开发时,保持我的程序运行并保持UI在Windows XP,Vista和7上看起来相同意味着我需要时使用Microsoft虚拟机。我被告知我的程序也适用于Wine,所以这是另一台测试机器。
现在回答你的问题:
a)Delphi 2010是否会为表格提供新的内容以帮助解决这种情况?
是。每个版本都添加了新的VCL组件,这些组件已添加到新操作系统中。例如Windows 7的新UI已添加。
b)我们应该选择一个售后市场组件套件并依靠它们来解决所有这些问题吗?c)我们应该选择售后市场剥皮引擎吗?正如我上面所说,我认为在Delphi本身比在第三方包中做得更好。
d)也许更多html类型的gui是要走的路。我们可以使用不需要使用浏览器的html制作相对复杂的gui应用程序吗? (更喜欢保持形式)
我的应用程序就像一个富文本的字处理器。我看过基于HTML的编辑器套件,但有一些,但我认为它不适合桌面应用程序。如果你想要一个基于Web的应用程序,那么使用.NET和Prism会更好。
e)我们是否应该扼杀并编码这些场景中的每一个并退出关于它的婊子?
首先升级到Delphi 2010。你会发现Delphi本身会为你处理大部分情况。
f)最后,我们应该如何测试所有这些条件?
即使使用虚拟机,自己动手也是一项艰巨的任务。您需要做的是拥有一个开放的Beta版,并在不同的环境中获得尽可能多的不同用户来为您测试您的程序。然后,您将处理对您的用户最重要的所有环境。
现在,如果你认为在不同的Windows环境中获得用户界面兼容性很难,那就等到Embarcadero推出他们将为Mac编译的Delphi版本。与当时的用户体验相比,您目前的用户界面担忧似乎微不足道。
答案 3 :(得分:1)
对于多种分辨率/ DPI大小的表单缩放:我们使用DevExpress LayoutControl。它确保表单上的控件始终对齐以使用可用空间,无论如何。而且它做得更多。看看their site。
答案 4 :(得分:0)
答案 5 :(得分:0)
Delphi使这一切变得相当容易,但最终你将在所有Windows版本上运行你的软件并直观地检查一切看起来不错。自动化测试非常适合测试功能,但化妆品只能通过视觉检查。
答案 6 :(得分:0)
Delphi 2009支持主题(这是一个应用程序级别设置)。当您在Vista / Windows 7中运行Delphi 2009或更高版本的应用程序时,它会将消息框更改为TaskDialogs,因此您可以免费获得一些UI改进。
我们在移植到Delphi 2009和Unicode时遇到了一些困难,但这是我们在某些时候必须支付的“技术债务”。
希望这有帮助。