问题标签 [delphi-2007]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1404 浏览

delphi - 与构建配置相关的 Delphi 2007(或 2009)构建事件?

是否可以仅为 Delphi 2007 中的特定构建配置添加构建事件?

我使用 2007 年,但也会对您在 2009 年可以做什么感兴趣。

干杯山姆

0 投票
3 回答
1035 浏览

delphi - Delphi 2007 帮助集成

我在 2008 年初迁移到 Delphi 2007。迁移我所有的工具和组件花了很长时间,而且我并不急于再次这样做。我是从 Delphi 6 搬来的。(买了 D2006,但由于迁移的问题,没怎么用)。

MSDN / F1 帮助“集成”,但仍然经常让我发疯。我根据需要访问 D6 帮助文件和各个供应商的帮助文件,但它肯定不如旧的 put-your-cursor-on-a-method 有用,单击 F1 -> 你会得到一些旧的有用的东西帮助方法,尤其是在集成了所有供应商文件的情况下。

看来我参加聚会可能很晚了,但显然我并不孤单:http: //blogs.embarcadero.com/deeelling/2007/08/21/38290

我现在看到 Embarcadero 允许您下载 Delphi 2007 的 CHM 文件。他们有什么方法可以完全集成它们,并完全摆脱那个无用的 MSDN 怪物吗?

0 投票
1 回答
1711 浏览

delphi - CreateProcess 和 WaitForSingleObject 在两个 PDF 文件中的第二个失败

全部

我在 Delphi 2007 中使用 CreateProcess 和 WaitForSingleObject 打开文件并等待它们被关闭。我发现当我连续打开两个 PDF 文件时,第二个 WaitForSingleObject 立即返回。我还发现 jpg 和 tif 文件会发生这种情况,但 txt 文件不会发生这种情况。此外,第二个 PDF 的打开时间比单独打开的时间长 10 秒!它也发生在 Vista 和 XP 以及一系列计算机上。我是在错误地使用 CreateProcess 还是其他原因?

任何帮助,将不胜感激。

问候

鲍勃

0 投票
3 回答
5043 浏览

delphi - 在 Delphi 中,如何检查 IInterface 引用是否实现了派生但未明确支持的接口?

如果我有以下接口和实现它们的类 -

下面的代码打印出'Bad!' -

这有点烦人但可以理解。支持无法转换为 IBase,因为 IBase 不在 TImplementation 支持的 GUID 列表中。可以通过将声明更改为 -

然而,即使不这样做,我也已经知道A 实现了 IBase,因为 A 是一个 IDerived,而 IDerived 是一个 IBase。因此,如果我遗漏支票,我可以投 A,一切都会好起来的 -

但是当我们开始将 IBase 放入一个通用容器(例如 TInterfaceList)时,我们遇到了一个问题。它只能容纳 IInterfaces,所以我们必须做一些转换。

我非常希望有某种断言来捕获任何不匹配的类型——这种事情可以使用 Is 运算符对对象完成,但这不适用于接口。由于各种原因,我不想将 IBase 显式添加到支持的接口列表中。有什么方法可以编写 TImplementation 和断言,使其评估为真 iff 硬铸造 IBase(List[0]) 是安全的事情吗?

编辑:

正如答案之一中出现的那样,我添加了两个主要原因,我不想将 IBase 添加到 TImplementation 实现的接口列表中。

首先,它实际上并没有解决问题。如果,在 Test2 中,表达式:

返回 true,这并不意味着执行硬转换是安全的。QueryInterface 可能会返回一个不同的指针来满足请求的接口。例如,如果 TImplementation 显式实现了 IBase 和 IDerived(以及 IInterface),那么断言将成功通过:

但是想象一下,有人错误地将一个项目作为 IInterface 添加到列表中

断言仍然通过 - 该项目仍然实现 IBase,但添加到列表中的引用仅是 IInterface - 将其硬转换为 IBase 不会产生任何合理的结果,因此断言不足以检查以下是否硬 -演员是安全的。保证工作的唯一方法是使用铸态或支持:

但这是一个令人沮丧的性能成本,因为它的目的是由代码将项目添加到列表中以确保它们属于 IBase 类型 - 我们应该能够假设这一点(因此,如果这个假设是,则要捕获的断言错误的)。断言甚至不是必需的,除非有人更改某些类型时捕获以后的错误。这个问题来自的原始代码对性能也相当关键,因此我宁愿避免实现很少的性能成本(它仍然只能在运行时捕获不匹配的类型,但无法编译更快的发布版本) .

第二个原因是我希望能够比较引用是否相等,但如果相同的实现对象由具有不同 VMT 偏移的不同引用持有,则无法做到这一点。

编辑 2:用一个例子扩展了上面的编辑。

编辑3:注意:问题是我如何制定断言,以便在断言通过时硬转换是安全的,而不是如何避免硬转换。有一些方法可以不同地执行硬转换步骤,或者完全避免它,但是如果存在运行时性能成本,我就不能使用它们。我想要在断言中检查的所有成本,以便以后可以编译出来。

话虽如此,如果有人可以在没有性能成本和类型检查危险的情况下完全避免这个问题,那就太好了!

0 投票
2 回答
632 浏览

delphi - Delphi - 如何解决这种奇怪的 TGrid 行为?

德尔福 2007。

我有一个 TGrid 的行数超过了屏幕上的容量,并且网格的高度使得底部有一个部分绘制的行。当我单击这部分行时,它会跳起来完全可见(通过 Grids.pas 中名为“ClampInView”的过程)。但它并没有停止。由于鼠标现在位于一个新的部分绘制的行上,所以它也会跳起来。

最终效果是单击部分绘制的行开始选择垂直列中的单元格,一直旋转到底部(或直到您释放鼠标)。

我已经在一个新的 winforms 项目上复制了这个,只有一个 100 行的网格,没有代码,所以我很确定这不是我在代码中做错的事情。

这对我来说很糟糕,因为我在实际代码中的表单具有拖放类型的行为,因此在部分行上单击并释放 ~0.1 秒后将拾取单元格中的项目并将其放下约 50 行。当您单击一个单元格时,这绝对不是您所期望的。

有什么建议可以解决/解决这个问题吗?

0 投票
3 回答
2804 浏览

delphi - Delphi:如何调试运行直到你回到你的源文件?

如果我运行一个程序并引发异常,系统会询问我是要继续还是中断。

如果我选择 break 我可以看到异常来自哪里,但如果 break 在库或系统文件中而不是我的源文件之一(假设异常在System.pasor中Controls.pas)我需要手动执行执行,F8直到它返回到我的一个文件,所以我可以看到我的代码的哪一部分导致了异常。

这可能需要很长时间。

我知道我应该在我的代码中捕获较低级别的异常,但在这种情况下,它没有遇到我的异常处理程序之一。

有没有办法说

  • 继续执行,直到到达文件 X 或
  • 直到您回到项目特定文件。

出于对其他编译器/IDE如何处理这个问题的普遍好奇,我也很感兴趣。

抱歉,如果我没有尽可能清楚地说明这一点。

0 投票
1 回答
1480 浏览

delphi - WSDL 导入器生成故障服务器

我一直在尝试建立一个肥皂服务器来实现(这是正确的术语吗?)第三方制定的 wsdl 规范。我使用了 Delphi 的 wsdl 导入器。(部分)生成的代码如下所示:

调用时,服务器会说“接口'miniPortType'不支持名为'MiniMessageType'的方法”。

我只能通过使函数的名称和消息的主要元素的名称相同来使其工作。

我认为应该可以有不同的名称。至少soapUI 没有抱怨。我实际上别无选择,只能按原样实施 wsdl。有人知道我该如何解决这个问题吗?

我正在使用德尔福 2007。

谢谢,米尔。

0 投票
6 回答
5846 浏览

delphi - 印地 9 和印地 10 有什么区别?

我负责将 Delphi 2007 应用程序移植到 C#,并且完全没有使用 Delphi 的经验。我想知道 Delphi 包括的两个 Indy 版本之间有什么区别 - Indy 9 和 Indy 10。此时我什至不知道 Indy 是什么。有人可以帮我吗?它们只是 Delphi 库的不同版本吗?使用其中一种有何影响?

谢谢!

0 投票
4 回答
460 浏览

delphi - *有时*在 Delphi 中分配给常量时会出错

我正在使用带有所有补丁和更新的 Delphi 2007。

我有一个文件被两个不同的项目使用。该文件中有一个过程,我将简化如下:

Inc() 命令应该失败,因为您不能分配给常量。在一个项目中,我得到了一个错误(我称该项目为“准确”)。在另一个项目中,我没有收到任何错误(我将其称为“Bogus”)。我也没有收到任何警告。我不明白为什么编译器会让这个不正确的代码通过。

这是我在 Bogus 项目中尝试过的:

1 - 引入一个明显的错误,比如在一行中间输入“slkdjflskdjf”

结果:我得到一个错误,这证明它确实在尝试编译这个文件。

2 - 删除.DCU,并重建项目

结果:.DCU 重新生成,再次证明该项目确实在编译此错误代码。

有没有人想过为什么会发生这种行为?更具体地说,为什么它会发生在一个项目中而不是另一个项目中?是否有一些模糊的编译器选项允许分配给常量?

最后一点:两个项目都是从 Delphi 5 转换而来的。在具有相似代码的 Delphi 5 下,它们都可以正常编译。

编辑:感谢您的所有帮助。更改可分配类型常量指令后,我可以在两个项目中获得一致的行为。我今天学了些新东西...

0 投票
2 回答
1995 浏览

wcf - 如何使用命名管道绑定从 Delphi 与 WCF 通信

我可以使用 Delphi 2007 与使用 netnamedpipebinding 的 WCF 服务进行通信吗?

如果是这样,那怎么办?