问题标签 [delphi-6]

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 投票
1 回答
2199 浏览

delphi - 用 GDI+ 替换 StretchDIBits(在将图像绘制到打印机的画布​​时)

我的应用程序是在 Delphi 6 中开发的。由于后台处理和大量数据(它消耗大约 60MB - 120MB 的物理内存),这是一个资源密集型应用程序。此应用程序的功能之一是创建条形码图像并打印它们。如果用户继续生成条码,那么至少十分之一的条码中有缺失的行。

我能够使用 TExcellenImagePrinter 组件解决此问题。但是,它大大降低了性能。此解决方案被我的客户拒绝,因此,现在我尝试用 GDI+ 替换 WinAPI StretchDIBits 调用。

原始源代码如下:

正如乔在 embarcadero 论坛 ( https://forums.embarcadero.com/thread.jspa?messageID=471501#471501中所建议的那样,我从 ( http://www.progdigy.com/?page_id=7 ) 获得了 GDI+ 标头)。

我修改了我的源代码如下:

  • 创建了一个 TGPGraphics 类的对象并将打印机的句柄分配给它。

    gp := TGPGraphics.Create(Printer.Canvas.Handle);

  • 创建了一个 TGPBitmap 类的对象并将条形码图像分配给它。

    bmp := TGPBitmap.Create(Info^,Image);

    Info 是 TBitmapInfo 并且 Image 是一个指针。

  • 将打印机的尺寸分配给TGPRect 记录的实例矩形
  • 调用 DrawImage 函数:

    gp.DrawImage(bmp,rect);

但是,在进行这些更改后,打印机的输出中会显示空白图像。你能指出我是否遗漏了什么或者我的实施是错误的。你能提供任何关于这方面的指示吗?

0 投票
0 回答
2189 浏览

c# - 使用 COM 端口与硬币兑换器交互

我有一个硬币兑换器MEI Cashflow E7900和一个 MDB 适配器,用于将设备连接到串行端口。卖给我适配器的商店还提供了一个测试应用程序,它是用 Delphi 编写的,用 Borland Delphi v6.0 编译。它工作得很好,但我的代码出于某种原因没有。
当您使用 MDB 时,您必须每 200 毫秒发送POLL一次命令。如果一切正常,硬币兑换商会发送ACK. 当我使用 Delphi 应用程序发送它时,会话如下所示:

=> 0x0B* 0x0B(星号表示奇偶校验设置为标记。默认奇偶校验为空格)
<= 0x00

所以一切都很好,这就是我所期待的。当我POLL使用 C# 应用程序发送时,它就像:

=> 0x0B* 0x0B
<= 0x3F 0x00

有时,硬币兑换商发给我0x3F 0x11之后POLL毫无意义,没有像这样的任何有效回复。当我得到这样的响应时,我运行 Delphi 应用程序,它得到了一个有效的ACK响应。我正在使用 COM 端口嗅探器来确保发送的数据没有任何差异,包括端口配置本身,并且我不断收到不同的响应。
下面是测试应用程序(Delphi)的源代码:

此处提供完整的代码清单,但此处提供的代码应该足够了。

我的代码(C#):


使用 Delphi 应用程序的轮询命令:

使用我的应用程序轮询命令:

收到的数据似乎几乎相同,除了0x3F在开始时。但是设备的行为也不同,它似乎没有连接到 PC,当我使用 C# 应用程序时显示“机器禁用”,当我使用 Delphi 应用程序时显示“状态正常”。这可能是因为 .NET Framework 而发生的吗?任何用于 COM 端口交互的库名称都可以使用。

我有想法,为什么我得到不同的反应。也许我希望这里有人能帮助我。提前致谢。也感谢您阅读这个巨大的问题。

0 投票
2 回答
2120 浏览

sql-server - Delphi TADOStoredProc / D6 和 RAD Studio XE2 最近的故障

感谢任何可以提供帮助的人...

背景:

我有一个应用程序在 Borland Delphi v6 中编码并且仍然受支持。最近,我遇到了 TADStoredProc 类无法执行存储过程的问题。这段代码之前已经稳定了好几年,从未被修改过。

我可以在请求上配置超时,这是受尊重的,但是存储过程调用永远不会运行,即使超时时间很长。应用程序只是挂起,或因超时异常而退出。(我知道服务器没有负担过重,并响应同一客户端发起的其他 SQL SELECT 请求。)

我知道D6很旧。我确实有一个使用 Embarcadero RAD Studio XE2 的单独环境,在那里我设法构建了相同的项目,但仍然存在相同的问题。... 只想确认一下。

去哪儿?

  • 请查看提供的代码,看看是否有更好的方法来做事。(也许 MSSQL 界面更挑剔,最近更新后?)我当然欢迎推荐。
  • 是否有另一种方法可以插入应用程序,可靠且不需要 TADStoredProc?我已经完成了挖掘,但没有找到任何好的例子。

代码示例

感谢您的任何帮助,您可以提供。

0 投票
1 回答
1195 浏览

delphi - 如何完成通过函数的无类型参数传递的记录?

我可以将“任何”记录类型传递给我的程序吗?

很多时候,我将“记录”与字符串一起使用。

要清除它们,我需要写:

问题是我如何通过任何类型的记录来清除它?

为此,我得到了这个提示:“表达式不需要初始化/完成”。

感谢您提供的每一个信息!

0 投票
3 回答
602 浏览

c++ - 在 Delphi 6 中使用 C++ DLL

我必须在 Delphi 6 中使用来自外部 C++ DLL 的编码函数。以下是提供的声明:

long <Function Name> (char *Data, long &Apply, char *ReturnVal, long &Size)

Data 是输入值,Apply 是布尔值(默认值:FALSE),ReturnVal 是来自 DLL 的返回值,Size 是 ReturnVal 的长度。

为了在 Delphi 6 中使用它,我编写了以下代码:

我在注释为“错误”的行中遇到访问冲突

如果我将函数声明中的PChar替换为string,则访问冲突不会出现在同一行。它是在释放库时出现的。此外,iLength 参数的值已正确填充。

任何人都可以提供解决此问题的指示。

0 投票
1 回答
835 浏览

delphi - 为什么将 NIL 数组分配给 Variant 会导致在 Delphi 6 中返回非空数组?

考虑下面的代码,它在 Delphi 6 中编译和运行没有错误。当我恢复动态字符串数组时,我看到的不是在sa中看到的空数组,而是一个长度为 1 的数组,其中单个元素包含一个空字符串。为什么会这样?如何安全地将 NIL 动态数组分配给 Variant 并正确恢复它?这是代码:

0 投票
1 回答
5299 浏览

delphi - Delphi 命令行构建 (DCC32) 错误:找不到 System.pas

Win7/x64 中的 Delphi 6 Professional,带有 c:\Delphi6 文件夹。

由于 ProjectGroups 出现 OM 错误,我们需要一个一个地构建项目。

为了提供更快的编译,我尝试使用 DCC32.exe。

我在这个网站上找到了一些关于“用 4 个选项扩展 dcc32.cfg 来设置库路径”的信息。我将它们中的每一个都设置为“Delphi/Options/Env.options/Library path”。

然后我尝试了:

dcc32.exe b“任何.dpr”

但我收到错误:找不到 System.pas。

我不明白——也许 dcc32.exe 也想构建基本的 pas 文件,或者我需要使用另一种格式。

我们需要构建每个项目,因为我们使用了许多条件指令。

感谢您提供的每一个信息和建议。

0 投票
3 回答
4144 浏览

delphi - 在 Delphi 6 专业 IDE 中使用 DCC32 编译项目

IDE:德尔福 6 专业版。

我们有大项目。

我不能使用 Project Groups 来构建它们,因为我在构建时遇到了 OM 错误和奇怪的文件错误。

我的想法是我将使用 DCC32.exe 之前我与命令行参数(dcc32.cfg)发生了争执,但我认为我解决了它......

今天我尝试用它编译项目,但在第一个项目我得到了错误。

chdir c:\d\anyproject dcc32 -b any.dpr

该错误报告我找不到单位。我尝试在Delphi中编译,它是成功的。

所以我检查了这个问题。为什么以前的项目建筑是成功的,为什么这不是……?

然后我意识到这个 dpr 正在使用对子目录的引用,但并非所有文件都添加到项目中,其中更多是通过项目的“搜索路径”链接的。

但如果这是真的,那么这意味着 DCC32 没有使用项目的 DOF/CFG 文件!

所以问题在于 Delphi 合并所有内容以提供结果。它合并了全局搜索路径、项目的编译器指令、搜索路径等所有内容,并使用了项目的条件指令。

如果我理解得很好,DCC32 不用,只有 dcc32.cfg,而且我必须合并所有内容以进行编译,这是不可能的工作,因为我需要编写一个解析器来解释项目的参数,并合并与全局变量。

或者我误解了什么,问题是由我错过的其他事情引起的?

我在等你的建议!

感谢所有的想法、链接、信息等。

0 投票
2 回答
3643 浏览

delphi - 如何调整任何类型的图像的大小?

我的项目的目标是在 Delphi 6 中调整任何类型的图像(jpeg/gif/png)的大小。

我尝试了很多方法,但我无法获得理想的解决方案。任何线索如何做到这一点?它可以是一个简单的命令行工具、一些代码或一个 Delphi 组件。

我试过 imagemagick:太重了:20 megas + dlls + 注册表。

我尝试了一些片段,但其中大部分仅适用于 JPEG。我需要 gif/jpeg/png

我尝试了graphicEX,但没有加载我的GIF

0 投票
4 回答
28120 浏览

delphi - 在delphi中将十六进制str转换为十进制值

我在用 Delphi 将十六进制值的字符串表示形式转换为整数值时遇到了问题。

例如:

当我使用该功能时,$FC75B6A9D025CB16 给我 802829546:

但如果我使用 Windows 的 calc 程序,结果是:18191647110290852630

所以我的问题是:谁是对的?我,还是计算?

有人已经有这种问题了吗?