【问题标题】:How do I open files and URLs at runtime in Delphi?如何在 Delphi 运行时打开文件和 URL?
【发布时间】:2015-04-06 19:31:29
【问题描述】:

我想在 RAD Studio XE7 中制作的程序中添加两个按钮:

  • 在默认浏览器中打开网页 URL;
  • 在默认 PDF 阅读器中打开 PDF 文件。

我该怎么做?

P.S.:我尝试对 URL 使用 ShellExecute,但它返回以下错误消息:[dcc32 Error] Main.pas(44): E2003 Undeclared identifier: 'ShellExecute'。

【问题讨论】:

  • ShellExecute/Ex() 是这两种情况的正确解决方案(至少在 Windows 上)。如果您遇到问题,请显示您的实际代码以及您收到的任何错误消息。
  • 正如 Remy 所说,显示您的代码和错误消息有助于我们为您提供帮助。 “..不会声明标识符或类似的东西。”也许是“未声明的标识符”?如果是这样,您是否将WinAPI.ShellAPI 添加到您的uses 子句中?
  • 你真正的问题是你没有认真对待错误信息。如果您仔细阅读错误消息,您可能会理解它。即使您不理解这一点,如果您认真对待这些信息,您也会逐字复制它。声明“它不会声明标识符或类似的东西”只是表明您不认为错误包含信息。编程是关于细节的。准确。

标签: delphi pascal


【解决方案1】:
uses ShellAPI;

// this opens a URL in the default browser

url := 'http://www.stackoverflow.com';
ShellExecute(HInstance, 'open', PChar(url), nil, nil, SW_NORMAL);

// this opens any file with the default program assigned to that extension  

pdf := 'c:\data\stackoverflow.pdf';
ShellExecute(HInstance, 'open', PChar(pdf), nil, nil, SW_NORMAL);

【讨论】:

  • (一般来说,最好为每个文档类型创建一些辅助函数,如 opendocument、openurl 等,而不是在代码中添加依赖于操作系统的 shellexecute)
  • 好的,我想这就是问题所在。但是 SW_NORMAL 仍然会导致错误。 ([dcc32 错误] Main.pas(44): E2003 未声明的标识符:'SW_NORMAL')
  • @Rafael:您知道您可以要求 IDE 在 VCL 源代码中搜索定义吗?从主菜单搜索->在文件中查找,设置要查找的文本,勾选在目录中搜索,设置文件掩码 到你的 Delphi 版本的源目录 + *.pas,然后选中 Include subdirectories 框。它会为您找到事物的声明,因此我们不需要一遍又一遍地为您这样做。
  • @Rafael 我建议您在尝试继续之前学习基础知识。目前很明显你不了解德尔福的单位制。请了解这一点,这样您就不必为您曾经使用的每个标识符一遍又一遍地提出相同的问题。
  • SW_NORMAL 是在 Windows 单元中定义的,所以将 Windows 添加到 uses 子句中。否则,您可以将其替换为数字 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 2011-01-27
  • 1970-01-01
相关资源
最近更新 更多