Questions tagged «delphi»

Delphi是一种通过使用Object Pascal快速开发本机Windows,macOS,iOS和Android应用程序的语言。该名称指的是Delphi语言及其IDE,该IDE用于帮助编辑和调试Delphi项目。

13
Borland Delphi怎么了?[关闭]
我的印象是Delphi不再流行。但是现在在工作中,我必须对仍在使用的旧Delphi程序进行一些更改。我使用了Borland Developer Studio 2006,即使我以前几乎没有接触过它,但使用起来却非常愉快且直观。Delphi是否仍然被广泛使用,而我只是不知道它,还是有其他原因导致其下降?
69 delphi 

11
遗留代码移交最佳实践
几个月后,一位同事将继续进行一个新项目,而我将继承他的一个项目。为了准备,我已经下令迈克尔·费瑟斯(Michael Feathers)有效地使用旧版代码。 但是本书以及到目前为止我发现的有关遗留代码的大多数问题都与按原样继承代码的情况有关。但是在这种情况下,我实际上可以访问原始开发人员,并且我们确实有时间进行有序移交。 我将继承的一段代码背景: 它的功能是:没有已知的错误,但是随着性能要求的不断提高,在不久的将来将需要进行一些优化。 未记录:在方法和类级别上几乎有零个文档。但是,该代码应该在更高级别上执行的操作已被很好地理解,因为多年来我一直在使用其API(作为黑匣子)进行编写。 只有更高级别的集成测试:只有集成测试可以测试通过API与其他组件之间的正确交互(再次是黑匣子)。 非常低级的,针对速度进行了优化:由于此代码是整个应用程序系统的核心,因此多年来,许多代码已进行了多次优化,并且非常低级(对于某些结构,一部分具有自己的内存管理器) /记录)。 并发和无锁:虽然我对并发和无锁编程非常熟悉,并且实际上为该代码贡献了一些内容,但这又增加了另一层复杂性。 大型代码库:这个特定的项目有超过一万行代码,因此我无法向我解释所有内容。 用Delphi撰写:尽管我不认为该语言与该问题紧密相关,但我将把它放在这里,因为我认为这种类型的问题与语言无关。 我想知道如何才能最好地度过他离开之前的时间。这里有一些想法: 让一切都可以在我的机器上构建:尽管应该将所有内容检查到源代码控制中,但谁也不会忘记偶尔检查一次文件,因此这应该是首要任务。 更多测试:虽然我希望进行更多的类级单元测试,以便在进行更改时可以尽早发现我引入的任何错误,但现在的代码不可测试(大型类,长方法,太多代码)相互依赖)。 文档内容:我认为对于初学者来说,最好将文档重点放在代码中那些本来就难以理解的领域,例如由于其低级/高度优化的特性。恐怕其中有些事情看起来很丑陋,需要重构/重写,但是实际上其中存在一些优化,这是我可能会错过的一个很好的原因(参见Joel Spolsky,您应该做的事情)从不做,第一部分) 如何记录:我认为最好是一些体系结构的类图和关键功能的序列图以及一些散文。 向谁记录:我想知道让他写文档或让他向我解释会更好,这样我可以写文档。我担心,对他而言显而易见但对我而言不明显的事情将无法得到适当覆盖。 使用成对编程进行重构:由于时间限制,这可能无法实现,但是也许我可以重构他的一些代码,以使其在他仍然在提供有关事物为何如此的方式的输入时更加可维护。 请评论并添加到此。由于没有足够的时间来完成所有这些工作,因此我对如何确定优先级特别感兴趣。 更新:移交项目结束后,我在下面的答案中根据自己的经验扩展了此列表。

10
WPF与WinForms-Delphi程序员的观点?
我已经阅读了WPF与WinForms上的大多数主要线程,而我发现自己陷入了不幸的矛盾之中,当您在尝试使用过的和真正的先前技术(Winforms)以及它的后继技术(WPF)之间做出选择时,就会陷入这种矛盾中。 我是多年的资深Delphi程序员,最终终于跳到了C#。我的其他Delphi程序员同伴将了解到,我很高兴知道Delphi闻名的Anders Hejlsberg是C#的架构师。我对Delphi的VCL定制组件非常着迷,尤其是那些涉及制作多步向导和充当子组件容器的组件的组件。 在这种背景下,我希望从Delphi转到C#的那些人可以帮助我完成WinForms vs. WPF决策,以编写初始应用程序。请注意,当我进行编码时,我非常急躁,诸如成熟的自动完成功能和适当的调试器支持之类的东西可能对我来说成败一个项目,包括能够找到有关API功能和调用的随时可用信息,甚至更多的错误解决方法。 。 2009年初日期范围内的SO线程和注释使我非常担心WPF,因为它可能会破坏我的C#UI开发代码。另一方面,花费大量时间来学习即使没有被放弃也即将被替换的API技术(WinForms),同样令人不安,我确实在WPF诱人中发现了GPU支持。 因此,我的矛盾情绪。由于我还没有学过任何一种技术,所以我有一个难得的机会重新开始,而且不必面对巨大的“无学习”曲线,当WinForms程序员转向WPF时,我已经看到人们在各个线程中提到了这一点。另一方面,如果对像我这样的耐心的RAD开发人员来说,使用WPF太令人沮丧或产生其他严重的负面影响,那么我将坚持使用WinForms,直到WPF达到相同的支持水平和易用性。为了给您一个具体的例子说明我作为程序员的心理,我使用了VB,随后又使用了Delphi,以完全避免使用MFC进行编码的真正痛苦,MFC是许多开发人员在开发早期Windows应用程序时都会遇到的Windows UI库。我从未后悔避免使用MFC。 知道Anders Hejlsberg是否参与过WPF和/或WinForms的体系结构,以及这两个代码库中体现的创意视野和易用性方面是否存在差异,也令人感到欣慰。最后,再次让Delphi程序员知道使用WPF而不是WinForms时需要多少“ IDE schock”,尤其是在调试器支持方面。2011年更新的任何就业市场评论也将不胜感激。
38 c#  wpf  winforms  delphi  microsoft 

1
为什么.NET框架没有将类定义为一流类型的概念?
熟悉历史的人都知道,C#和.NET框架最初是由Delphi的首席开发人员Anders Hejlsberg设计的,“ Delphi被重写为Java感觉”。从那时起,事情发生了很大的分歧,但是在早期的相似性是如此明显,以至于甚至有人认真地猜测.NET实际上最初是Borland的产品。 但是最近我一直在看一些.NET东西,而Delphi最有趣,最有用的功能之一似乎完全消失了:类作为一流数据类型的概念。对于不熟悉它的人,类型TClass代表对类的引用,类似于Type.NET中的类型。但是,在.NET Type用于反射的地方,Delphi将其TClass用作语言的非常重要的内置部分。它允许各种有用的习惯用法,如果没有它,它们就不会存在,也不会存在,例如类子类型变量和虚拟类方法。 每种OO语言都有虚拟方法,其中不同的类以不同的方式实现方法的相同基本概念,然后根据运行时所调用对象实例的实际类型在运行时调用正确的方法。Delphi将此概念扩展到了类:如果您将TClass引用定义为特定的类子类型(即class of TMyClass,该变量可以接受继承自的任何类引用TMyClass,但不能继承继承体系中的任何内容),且该类引用附加了类范围虚拟方法通过使用类的实际类型,可以在没有实例的情况下调用它们。例如,将此模式应用于构造函数会使Factory实现变得很简单。 .NET中似乎没有任何等效的东西。与类引用一样有用(尤其是虚拟构造函数和其他虚拟类方法!),有没有人说过为什么将它们遗漏? 具体例子 形式反序列化 Delphi VCL DFM以DSL格式保存表格,以描述组件层次结构。表单阅读器解析DFM数据时,它跨如下所述的对象运行: object Name: ClassName property = value property = value ... object SubObjectName: ClassName ... end end 有趣的是这里的ClassName部分。每个组件类都会及时TClass在组件流式系统中注册initialization(请考虑静态构造函数,只有一点点不同,保证在启动时立即发生。)这会将每个类注册在string-> TClass哈希图中,且类名称为键。 每个组件都来自TComponent,它具有一个虚拟构造函数,该构造函数采用单个参数Owner: TComponent。任何组件都可以重写此构造函数以提供自己的初始化。当DFM阅读器读取类名称时,它会在上述哈希图中查找该名称并检索相应的类引用(如果不存在则引发异常),然后在其上调用虚拟TComponent构造函数,这被认为是很好的因为注册函数采用了从TComponent继承的类引用,所以您最终得到了正确类型的对象。 缺少这一点,WinForms等效项...坦白地说,这是一个很大的混乱,需要任何新的.NET语言来完全重新实现其自身的格式(反序列化)。当您考虑时,这有点令人震惊。因为拥有CLR的全部目的是让多种语言使用相同的基本基础结构,所以DFM风格的系统将具有完美的意义。 可扩展性 如果您尝试检索不在集合中但在数据源中可用的名称,那么我编写的图像管理器类可以提供数据源(例如图像文件的路径),然后自动加载新的图像对象。它具有一个类变量,该类变量的类型为class of基本图像类,表示要创建的任何新对象的类。它具有默认值,但是在出于特殊目的创建新图像时,有一些要点应以不同方式设置图像。(在没有Alpha通道的情况下创建它,从PNG文件中检索特殊的元数据以指定图片大小,等等。) 这可以通过编写大量的配置代码并将特殊选项传递给所有可能最终创建新对象的方法来完成...或者您可以仅使基本图像类的子类覆盖虚拟方法,已配置有关方面,然后根据需要使用try / finally块临时替换“默认类”属性,然后将其还原。使用类引用变量执行此操作要简单得多,而不是使用泛型即可完成。

4
用于GUI编程的Delphi vs C#[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我来自PHP和Python的背景,对C的了解很少,我做了很多基于Web的应用程序,现在我正在考虑Windows平台的桌面应用程序。 一个朋友告诉我去Delphi,其他人说C#是最好的,嗯,我正在寻找的是 简单 生产率 好的API文档 速度 拖放 多线程和良好的网络API 谢谢
20 c#  delphi 

6
在哪里可以找到良好用户界面的灵感?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 关于为当前正在升级的桌面应用程序设计主屏幕界面,我有一个想法。当我第一次开发该程序时,屏幕分辨率为640 X480。今天有多种屏幕分辨率。 在哪里可以找到有关桌面应用程序主屏幕布局良好的想法?

13
哪些特征有助于Pascal的发展?
我正在编译Pascal语言的详细历史记录,而我缺少一些细节。 今天有太多功能让我们理所当然。哪些功能对Pascal的发展做出了重大贡献,为什么它们如此重要? 我在寻找语言功能,而不是平台或框架功能。因此,例如运算符重载或默认参数,而不是Linux支持或新的Rich Text小部件。 我知道Pascal有几种不同的口味(Delphi,Free Pascal,Oxygene,Quick Pascal,Apple Pascal等),它们在不同的时间并行地引入了相同的功能。那没问题。我期待在Pascal语言作为一个整体,并当了显著的里程碑发生(日期,版本等)
17 history  delphi  pascal 

2
编译器上的许可证是否有先例,限制了可以使用它的开发类型?
最近,一项令人slip目结舌的事情是,用于Delphi XE3的新EULA将禁止使用专业版进行客户端服务器开发,而无需额外购买客户端服务器许可证包。这并不是说专业版将缺少这些功能,但是许可证将特别禁止开发人员将编译器用于特定类别的开发,即使使用第三方或自行开发的解决方案也是如此。 所以我的问题是,是否有编译器或类似创意工具的先例禁止您使用它进行工作。特别是商业授权的“专业”工具,例如Delphi XE3。另外,这样的限制是否在法律上可以执行? 我知道过去曾经有教育版或简化版工具限制了它们在商业上的使用,但这些工具并没有作为“专业”工具出售。我也知道,许多计算软件和设备都会有免责声明,称它不用于“生命维持设备”或“核能”,但更多的是避免责任而不是禁止活动。 好像我记得Microsoft在FrontPage中设置了一个限制,即您不能使用它来创建一个对Microsoft反映不佳的网站,但是他们撤消了该限制,然后才能对其进行合法测试。 更新:由于公众的抵制,EULA在产品出厂前已被下架。
16 licensing  delphi  eula 

7
Delphi XE2如何在各种平台上工作?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 因此,我一直在阅读有关Delphi XE2的文章,我很可能会去本月晚些时候在芝加哥进行的世界巡回演出,问这个问题是否有人在这里不能回答。 我想知道如何在Mac上执行我的Delphi代码?为了使程序运行,是否还需要运行其他东西(即虚拟机)?

2
Oberon真的是“更好的Pascal”吗?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 阅读Niklaus Wirth时,您可能会注意到,尽管Pascal颇受欢迎,但他对Oberon(作为Pascal和Modula的“抛光”继承者)没有得到太多欢迎感到不高兴。我从未在Oberon中做任何事情,但是阅读Paerscal Developers的Oberon页面我确实不喜欢像Delphi / pascal开发人员那样的许多更改。 强制保留字始终为大写 使语言区分大小写 摆脱枚举类型 您如何看待Oberon,从您的角度来看,这真的是“更好的Pascal”吗?

5
部署使用Microsoft新的LocalDB的应用程序需要什么?
我想知道什么新的LocalDB要在用户计算机上运行需要安装哪些Microsoft组件。 现在在CTP3中:SQL Server Express LocalDB LocalDB是SQL Server Express Edition的一种新的轻量级部署选项,具有较少的先决条件,并且安装非常迅速。对于需要嵌入式SQL Server数据库用于桌面应用程序或工具的开发人员而言,这是理想的选择。LocalDB具有与SQL Express相同的所有可编程性,但是它们与应用程序一起在进程内运行,而不是作为服务运行。它是SQL Server代码名“ Denali” CTP3下载的一部分。 以上是Microsoft网站CPT3中的新增功能 这听起来像是小型单用户桌面应用程序的理想SQL数据库。我试图找出我需要包含在安装中的内容。我想将其用作嵌入式数据库,但是我不知道是否需要安装任何Microsoft组件或确保以前已经安装了任何其他Microsoft组件。 有谁知道为了使此新LocalDB运行需要安装哪些Microsoft组件?是否有安装程序可以自动检测安装所需组件的存在?

1
在delphi Pascal中实现MVVM和MVC的最佳实践
我是一个Delphi Pascal程序员,我使用最新的Embarcadero delphi XE,并且想利用诸如模型视图控制器和模型视图视图模型之类的设计模式。 但是,关于在Pascal上执行此操作的最佳做​​法,在网络上似乎没有很多。我可以找到的大多数示例都在C#中,并且某些语言功能在pascal中不存在,这意味着我可能必须找到实现这些功能的方法。 我正在尝试从此处修改本文的代码 我将列出我面临的问题 可空类型 Pascal不像C#那样具有可为空的类型,因此我创建了自己的类型。 TNullable<T> = record strict private fHasValue : boolean; fValue : T; function GetValue:T; procedure SetValue(newValue : T); public property HasValue : boolean read fHasValue; property Value : T read GetValue write SetValue; procedure SetToNull; end; 在实施部分 function TNullable<T>.GetValue:T; begin if fHasValue …

4
整数是否过多用作数据类型?
大多数应用程序开发人员是否在真正要使用无符号整数的地方使用有符号整数?我一直在做,我的同事也在做。我没有看到很多其他广泛的代码库(Delphi VCL除外),并且互联网上的示例通常使用整数。VCL开发人员使用自己的数据类型(这是声明变量的最懒惰的方式)。 像这样的代码似乎有些可怕 TStuffRec = record recordID : Integer; thingID : Integer; otherThingID : Integer; end; 什么时候可以写成 TStuffRec = record recordID : Cardinal; thingID : Cardinal; otherThingID : Cardinal; end; 从功能上讲,这些记录几乎总是相同的(并且希望即使在64位Delphi中也将继续相同)。但是非常多的人会遇到转化问题。 但是使用无符号整数也有缺点。主要是因为将两者混在一起是多么烦人。 真正的问题是,这是否是实际上已被考虑或纳入最佳实践的东西?通常只取决于开发人员吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.