问题标签 [toolsapi]

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 回答
806 浏览

delphi - 我可以只忽略一次异常吗?

当发生异常时,调试器会给我以下消息:

在此处输入图像描述

我可以通过检查来选择忽略异常ignore this exception type
然而,这样做会忽略所有未来项目中的异常,这比无用更糟糕,因为我不想忽略每个项目中的异常;我只想在这次运行中忽略它们。

使用 ToolsAPI,有没有办法:

A - 仅忽略此运行的异常,或
B - 仅忽略此项目的异常,或
C - 重新启动 Delphi 时恢复忽略异常设置?

如果我能做到 A、B 或 C,我的问题就解决了。

我知道ignore exception数据存储在:

HKEY_CURRENT_USER\Software\Embarcadero\BDS\17.0\Debugging\Embarcadero Debuggers\Language Exception Classes

我的首选选项是使用 ToolsAPI 来修复消息框并添加一个ignore this exception for this session only复选框。
但是,如果那不可用,我可以在注册表中搞乱。
如果我确实回退到注册表,我想强制 Delphi 重新加载设置,这样我就不必重新启动 IDE。

作为记录,我正在使用西雅图,但我更希望从 2007 年开始使用它。

我检查了 ToolsAPI,但IOTAFileFilterWithCheckEncode看起来不相关,我认为IOTABreakpoint80仅适用于用户设置的断点。

我还没有源代码,因为我不确定使用 ToolsAPI 是否可以实现我想要的,如果不是,我将回退到使用记录上述注册表项的外部应用程序,启动 Delphi 并恢复注册表项。我希望有一种更清洁的方法。

0 投票
1 回答
206 浏览

delphi - 使用OTA返回特定平台的库路径

我想获取特定平台(win32、win64、OSx)的库路径。但是,当我询问库路径时,OTA 只是返回给我 OSx 库路径。

代码是:

我注意到一件奇怪的事情。当我询问键值时,我得到 3 LibraryPath。

当我做:

我得到:

我认为每个键都必须代表我拥有的可能目标之一(win32、win64、OSx)。但是因为我可以将 Key 的值称为它的名称,所以它总是返回它找到的第一个键,在我的情况下它是 OS X。

0 投票
1 回答
358 浏览

delphi - 如何更新旧的 IDE 扩展代码,使其不使用已弃用的 ExptIntf 和 ToolsIntf 单元?

我正在做关于扩展 IDE 的第一次测试,但我只发现使用ExptInftand的旧源代码ToolsIntf已被弃用(Delphi 2007)。

我正在寻找更新的示例代码或更新旧示例的帮助。

这是我为尝试更新旧示例所做的:

我从这个示例源代码开始:

官方文档中,我读到我应该使用TNotifierObjectwho implements IOTAWizardand IOTAMenuWizardinterfaces (From ToolsAPIunit),而不是ExptIntfand ToolsIntf

为了更新示例代码,我执行了以下步骤:

  1. 已从源代码中ExptIntf删除。ToolsIntf
  2. 添加ToolsAPI到使用条款。
  3. 替换TExpertStateTWizardState
  4. 替换esEnabledwsEnabled
  5. 替换RegisterLibraryExpertRegisterPackageWizard

这样做之后,我仍然在TExpertStyle和上有未声明的标识符错误ToolServices

应该如何更新这些部分和/或在哪里可以找到不使用已弃用单元的示例?

0 投票
1 回答
590 浏览

delphi - 使用 ToolsAPI 将菜单项添加到 Delphi IDE 中单元的选项卡上下文菜单

我正在寻找需要使用哪些服务/接口将项目添加到 Delphi IDE 中源文件的右键菜单。

例如,如果我右键单击一个单元的选项卡,它具有“关闭页面”、“关闭所有其他页面”、“属性”等项目。如果可能,我想向该菜单添加自定义项目。

我查看了 ToolsAPI 单元,但不知道从哪里开始。我假设有一个界面可以用来枚举项目和添加项目,但我不知道从哪里开始寻找。

如果那不可能,我会选择代码编辑器的上下文菜单。

也许网上有一些样品,但我仍在寻找,但没有找到。

任何帮助表示赞赏。

0 投票
1 回答
311 浏览

delphi - Delphi 5组件会自动将“db.pas”单元添加到uses子句?

我正在编写我自己的组件,我希望它在我将它放在表单上时将它添加"db"interface使用子句中,因为它有一个已发布的事件,例如:

TDataSet在中声明db.pas,我需要手动添加这个单元,我想避免。

我已经看到了这个解决方案:

将组件添加到表单时如何自动添加 Delphi 单元?

和这个:

我可以让自定义 Delphi 组件向使用子句添加多个单元吗?

那个用途RegisterSelectionEditor,但Delphi 5(我知道......)似乎没有这个单元。

我有哪些选择?

0 投票
0 回答
97 浏览

delphi - 使用 ToolsApi 应用不同值 IDE SizeFont 后如何刷新 Delphi IDE?

在应用新的字体大小后,我正在尝试刷新我的 IDE。代码是:

如果我从 IDE 打开编辑器选项,我可以看到新值已正确应用,但当我单击“工具选项”屏幕上的“确定”按钮时,它只会反映在 IDE 中。如何直接从代码中应用它?

0 投票
1 回答
100 浏览

delphi - debugAPI 中的 Frame 是什么?

在 Delphi debugAPI 中,有几个对 a 的引用,FrameIndex例如:

有几个方法接受一个FrameIndex参数,但是,什么是FrameIndex?我可以在哪里获得FrameIndex

0 投票
0 回答
140 浏览

delphi - 如何在 IDE 上获取 RTTI 信息

我想获取TExceptionNotificationDlg位于 dbkdebugidexxx.bpl 中的 VMT 条目。
IDE 在启动后不久加载此模块。
我想阻止显示异常报告对话框并替换我自己的显示。

简单的方法是拦截这个窗口的ShowModal功能。ShowModal 是一个虚函数,因此存储在 VMT 中。
默认情况下,此类的 VMT 包含指向 的链接CustomForm.ShowModal,因此简单挂钩已失效。我需要修改 VMT。
IDE 在启动时将我的代码加载为 DLL。

如果我只有模块 ( )name和窗口类 () 的名称,我如何获得 VMT 的地址?HModuledbkdebugidexxx.bplTExceptionNotificationDlg

请注意,此表单仅在显示异常时创建并在之后立即销毁,使用HWnd获取信息已出(我之前使用创建表单的 HWnd 访问表单的发布信息https://compilerintrinsics.wordpress.com /,但我不能在这里这样做)

0 投票
0 回答
160 浏览

delphi - 可以使用 OTAPI 以编程方式设置 Delphi 10 的选项集文件吗?

是否可以在分别使用接口1创建新的 Delphi 项目时以编程方式自动设置选项集文件引用?IOTAProjectOptionsIOTAProjectOptionsConfigurations

或者我可以使用任何其他OTAPI IDE 服务2来做到这一点吗?

我目前正在使用 RAD Studio Delphi 10 Seattle IDE。不过,如果更新的 OTAPI 版本支持该功能,我仍然想知道这一点。

我找不到任何合适的属性或函数,这似乎在我当前的ToolsAPI.pas.

我想实现与Apply Option Set -> Reference在 IDE 的项目管理器视图中选择根项目配置根节点相同的效果:

在此处输入图像描述

假设我正在寻找一些功能,例如


多一点背景:

我目前正在为我们公司范围的 Delphi 项目设置开发遗留项目向导。我已经有一个工作IOTAProjectCreator实现,它还可以.dproj在 IDE 生成和保存 MSBuild XML 文件后对其进行操作。我只是在Import那里添加一些条件元素。

现在我们还想使用存储在中央存储库中的选项集文件。在使用 GUI 应用该操作之后,我知道并研究了.dprojXML 中的差异,但是有不可忽略的逻辑量(关于依赖关系等),我避免(重新)实现该逻辑通过纯 XML 文件操作。更不用说必要的逻辑很容易随着 IDE 的未来版本而改变。


1)我试图在IOTAProjectCreator实现的上下文中使用它,并定义procedure SetInitialProjectOptions(NewProject : IOTAProject);函数。

2)遗憾的是,这些功能的文档记录如此糟糕。

0 投票
1 回答
507 浏览

delphi - 如何通过 Delphi 上的 Object Repository 从包中创建可继承的自定义表单?

我创建了一个用于创建自定义表单的向导。它工作正常。我可以从“文件”>“其他”>“我的向导”菜单中创建它。但是,我想添加表单和对话框的常用选项:“使用”、“继承”和“复制”。这个怎么做?是否需要实现任何接口方法来设置它是可继承的?下面是我助手的代码片段。

...

...

...

...

下面是我希望我的向导如何留下的示例图片。类似于原生 Delphi 对象(如 AboutBox)

Delphi 文件对话框