问题标签 [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 投票
3 回答
2150 浏览

delphi - 创建自定义表单设计器

我想在 Delphi 中创建一个自定义的“数据模块”,一个类似 TDataModule 的(可能是继承的)类,它有一个基于自定义网格的设计界面(每行一个组件,一些属性作为列)。这可能吗?我应该从哪里开始?

我目前正在使用 Delphi 2007。

0 投票
5 回答
2785 浏览

delphi - 为什么我在 Delphi TMainMenu 中没有热键下划线

在 Delphi 2007 程序中,我使用 TMainMenu 引用 TAction 列表中的操作。我在所有主要字幕的热键前面都加上了一个 & 符号:

在设计视图中,这些热键像我所期望的那样带有下划线,但是当我启动程序时,它们不再带有下划线,但它们仍然有效。与此相反,对于所有子菜单图标

下划线按预期显示。

我知道 Windows pisplay 属性选项“隐藏带下划线的字母或键盘导航,直到我按下 Alt 键”。并禁用它。在所有其他程序中,这都可以正常工作,包括 Delphi IDE。

如果我创建一个新的 VCL 应用程序并添加一个 TMainMenu 和一些菜单项,它会按预期工作。

这让我很困惑,真的。

TMainMenu 组件是否有任何属性或者我必须更改的应用程序选项?“启用运行时主题”项目选项由于某种原因灰显,可能是问题所在吗?如果是,是什么原因造成的?

0 投票
2 回答
1718 浏览

delphi - Delphi 2007 和 {$IFDEF...} 指令,看不到我们的条件

我们的代码库中的组件文件中有以下内容:

原因是对于各种遗留应用程序,将使用一种或另一种类型的数据库连接和一组类。

但是,在配置新机器时,似乎没有考虑我们的条件。在项目设置中,它显示“ADO;DEBUG”,但它使用 odbc 类型编译上述代码。

奇怪的是,它并不一致。作为同一项目的一部分构建的两个不同单元使用不同的设置。换句话说,在一个地方我们的条件是可见的,在另一个地方它不是。

编译错误的文件没有任何 {$UNDEF 或类似指令,也不包含任何文件。

我在这里想念什么?

已解决(呃):是的,Delphi 只是被愚弄了,或者诸如此类。

我们发现了这些:

其中都提到了“Platform=BNB”设置。通过启用诊断输出,我们可以看到准确的值。所以我们尝试根据文章覆盖它,没有运气,仍然是 BNB。然后我们进入项目设置,原来它也可以在那里被覆盖,所以我们也这样做了,仍然没有运气。

结果发现 Delphi 安装程序或其他什么东西在操作系统级别添加了一个“Platform=BNB”环境变量,删除它,重新启动 Delphi,一切都很好。

嗯,和可以预料的一样。不过,我们仍然必须使用 Delphi。

0 投票
2 回答
7477 浏览

delphi - Delphi Indy IdTcpClient 读取操作返回一个特定请求的截断数据

这是一个有趣的问题,我还没有解决。

我正在编写一个通过 Internet 与服务器通信的客户端。我正在使用 RAD Studio 2007 本机个性在 Indy 10 中使用 TIdTcpClient Internet Direct (Indy) 组件。

为了从服务器获取数据,我使用 SSL 通过端口 443 发出 HTTP 请求,其中我的请求详细信息包含在 HTTP 消息正文中。到现在为止还挺好。代码就像魅力一样工作,但有一个例外。

我提交的一个请求应该会从服务器产生大约 336 KB 的响应(HTTP 响应标头包含 Content-Length:344795)。问题是我只得到了 320KB。XML 格式的响应在 XML 元素的中间被明显截断。

值得一提的是,XML 是简单的文本。没有可以解释截断的特殊字符。我的 TIdTcpClient 组件只是报告说,在收到部分响应后,服务器优雅地关闭了连接(这是每个响应都应该完成的方式,即使是那些没有被截断的响应,所以这不是问题)。

我可以对响应也超过几 K 字节的同一服务器进行几乎相同的调用,并且所有这些都可以正常工作。我提出的一个请求返回大约 850 KB,另一个返回大约 300 KB,依此类推。

简而言之,我只在一个特定的请求中遇到这个问题。所有其他请求(其中有很多)都会收到完整的响应。

我已经与服务的创建者进行了交谈,并提供了我的请求示例。他报告说请求是正确的。他还告诉我,当他向他的服务器发出我的相同请求时,他得到了完整的响应。

我不知所措。要么是服务的创建者弄错了,那端的响应实际上有问题,要么是我的请求有一些特殊之处。

这里有我想念的解决方案吗?请注意,我还使用了许多其他读取机制(ReadString、ReadStrings、ReadBytes 等)并且都产生相同的结果,在 320KB 标记处截断这个特定响应。

该代码可能不相关,但无论如何我都会包含它。抱歉,我不能包含 XML 请求,因为它包含专有信息。(ReadTimeout 设置为 20 秒,但请求在 1 秒左右返回,所以不是超时问题。)

0 投票
2 回答
1224 浏览

delphi - 在同一台机器上安装 Rad Studio 2007 和 Rad Studio 2010

我想在已经安装了 Rad Studio 2007 的机器上安装 Rad Studio 2010,存在兼容性问题?

提前谢谢,再见。

0 投票
3 回答
1974 浏览

delphi - 当我移动项目时,导致“提示”在列表视图上重新触发

当然我以前见过这样做,但是我找不到任何例子。

我有一个 TListView,设置为“报告”视图样式。它有大约六个子项,我们想做的一件事是让列表视图上的“提示”(工具提示)动态显示另一个数据字段。也就是说,每次将鼠标移到任何给定行上时,“提示”都会显示与该特定行相关的一些文本。

我已经完成了 - 我可以使用 OnInfoTip 方法执行此操作,但不幸的是,一旦出现提示,Windows 似乎决定我不需要再次查看列表视图的提示,直到我将鼠标从列表视图移开然后再次“结束”它。简单地将鼠标向下移动到下一行,始终将鼠标悬停在控件上,并不能说服程序显示新提示。

为了清楚起见 - 我已经让 OnInfoTip 工作,以便程序确实显示与我第一次将鼠标移到的项目相关的正确提示。更改提示文本不是问题。问题在于将鼠标移动到列表视图中的另一个项目不会导致软件显示新提示。(希望这是有道理的)。

是否有一些正确的方法可以使这种行为起作用,或者我最终会用鼠标悬停做一些令人讨厌的事情,然后手动绘制提示框(等)?

0 投票
2 回答
2110 浏览

delphi - 在 TGridPanel 中找出控件的位置

如何找出 TGridPanel 中控件的位置(行和列索引)?我想对按钮数量使用常见的 OnClick 事件,并且需要知道按钮的 X、Y 位置。

我正在使用德尔福 2007。

0 投票
1 回答
113 浏览

.net - CardSpace 和 Delphi 2007/WIN32

很简单的问题。我有一个 Delphi 应用程序,我想通过要求用户使用CardSpace登录来限制对此的访问。基本上,我需要从 cardspace 卡中提取 ID、姓名和地址信息。

CardSpace 的使用是客户的要求,我只想知道:

  1. 可以从 Delphi 轻松使用 CardSpace 吗?
  2. CardSpace 是否已经有 Delphi 组件?

最大的问题?该应用程序必须是 WIN32 应用程序,尽管 CardSpace 是基于 .NET 的。

0 投票
4 回答
4367 浏览

sql - 如何使用 Delphi 2007 从 firebird 中的时间戳字段中获取毫秒值

我有一个 Firebird 数据库(在服务器版本 2.1.3 上运行)并使用 DBExpress 对象(使用 Interbase 驱动程序)通过 Delphi 2007 连接到它

我在数据库中的一张表看起来像这样

我可以添加到表中,并在 Flame Robin 中将时间戳字段显示为具有毫秒值。

但是当我select * from MYTABLE在表上执行全选 () 时,我无法获得毫秒值,因为它始终返回为 000。

这会导致重大问题,因为它是主键的一部分(不幸的是我没有设计表并且没有权限更改它)。

我尝试了以下方法来获取毫秒值:

但是它们在格式化时都返回 14/09/2009 14:25:06.000 。

如何从时间戳中检索毫秒?

更新: 如果这对将来的任何人有帮助,这里是我为 DBExpress 尝试的驱动程序和结果。

0 投票
2 回答
36130 浏览

delphi - 在 Delphi 2010 中将字符串写入 TFileStream

我有如下所示的 Delphi 2007 代码:

我这样称呼它:

这在 Delphi 2007 中有效,但在 Delphi 2010 中给了我很多垃圾字符。我知道这是由于 unicode 合规性问题,但我不知道如何解决这个问题。

这是我迄今为止尝试过的:

  • 将 SourceBuffer 的数据类型(以及 WideString 期望的参数)更改为 PWideChar

  • 此处列出的每一项建议

我究竟做错了什么?