问题标签 [otapi]

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

delphi - Is there a way to access (add, remove, and navigate to) IDE bookmarks with the OTAPI?

The Delphi IDE allows extensions and plugins via the Open Tools API (OTAPI). It's not very well documented and I am not sure where to look to find out a comprehensive list of what the API allows access to and can achieve, apart from browsing ToolsAPI.pas itself.

Specifically, I would like to access a list of all bookmarks in all open files in the IDE (and preferably, be able to add, remove and navigate to them, the last being the most important.) Is this possible, and what interface do you use to do it?

The closest I have found is this interface in ToolsAPI.pas:

That seems, for one view (edit window?), to let you navigate to a bookmark, turn it on or off, and record (?) it, if you know the ID of an existing bookmark or know how to create a new unique ID. (I'm speculating.) But I can't see any enumeration capabilities nor do I feel very sure of how to use the above interface reliably - where do the BookMarkIDs come from, for example? How do you know what they are? How do you generate one? Etc.

0 投票
1 回答
116 浏览

delphi - 是否可以从 Open Tools API 调用重构?

Delphi IDE 有一个插件系统,Open Tools API。IDE 还具有许多可用的重构,例如重命名重构以重命名字段、方法等 - 标识符。

是否可以从 OTAPI 调用这个或任何重构?如果没有,是否有一种 hacky 方法可以做到这一点?

我的研究表明在 ToolsAPI.pas 中没有提到重构,但我不想放弃“不”。这并不意味着没有办法做到这一点 - 它只是意味着我不知道它是什么:)

0 投票
0 回答
110 浏览

delphi - 如何在 IDE 中跟踪编辑器修改和行位置更改?

我正在编写一个跟踪特定行的 IDE 插件 - 认为它类似于 IDE 的内置书签功能。当用户编辑源代码时,特定行的位置会发生变化 - 例如,当在其上方某处按下 Enter 时,可能已经是第 100 行的第 101 行变为第 101 行。用户还可以删除行、一次选择和删除多个块、粘贴大块文本等,所有这些都会改变代码。

我想跟踪行插入和删除,以便知道“第 100 行”变成“第 101 行”,然后是“第 102 行”,依此类推。这怎么可能?


到目前为止,我发现的最接近的解决方案是使用INTAEditServicesNotifier.EditorViewModified它可以在每次进行修改时访问整个缓冲区。然后可以将整个缓冲区与前一个缓冲区的存储副本进行比较,以查看有哪些更改,并查看添加或删除了多少换行符以及在何处添加或删除。

每次编辑器修改都会产生巨大的开销,并且必须有更好的方法。

0 投票
1 回答
422 浏览

delphi - 如何在代码编辑器中跟踪代码折叠?

我正在编写一个标记特定行的插件,并将尝试在代码编辑器上为特定行绘制一个突出显示标记。为此,我需要计算特定代码行在屏幕上的位置,即缓冲区中的行。

IOTAEditViewDelphi 代码编辑器可以通过'sBottomRowTopRow属性访问哪些行在屏幕上可见。然而,在较新的 IDE 版本中,代码区域和方法可以折叠——也就是说,多行合并为一行。线条高光绘制的第一步是知道哪些线条可见以及它们的位置,为此我可能需要跟踪编辑器的哪些部分折叠,哪些不折叠。似乎有 OTAPI 方法可以调用代码折叠(省略),但不知道它何时发生。

但是,某些插件(例如 Castalia)确实可以管理此问题。怎么做到呢?

0 投票
0 回答
136 浏览

delphi - 如何获取项目可访问的对象列表?

我试图弄清楚如何从组件编辑器中访问 Delphi IDE 中可用的对象列表(即,来自不同的命名空间)。(也来自独立运行的同一个编辑器表单。)LiveBindings 做到了,并且有一个视频,他们说您必须在 uses 子句中列出一个单元,以便 LiveBinding 编辑器查看该单元内定义的类。但它不一定是一种形式。

我可以通过数组访问表单Application.components,但这只能让我访问TForm对象。在与表单相同的单元中定义的任何类都不可见,在任何不是表单的单元中定义的类也不可见。

有人建议答案隐藏在 Open Tools API 的某个地方。

我想这里可能有人可以对这个主题有更多的了解。

顺便说一句,我使用的是 DXE5,但 XE 及更高版本的任何内容都可能相同。

注意:我确实在某处找到了一个属性,其中列出了在整个该死的生态系统中定义的每个类和记录。有数百个!这没什么帮助。还在寻找。

0 投票
1 回答
212 浏览

delphi - 如何在设计时从自定义 TComponentEditor 显示 ActionList 编辑器

我有一个 TComponentEditor 后代,我注册 TActionList 以提供一些自定义选项。

回到 D2007,我可以通过从单元 ActnEdit 调用 ShowActionListDesigner 来显示默认的 ActionList 编辑器。只需将 designide.dcp 添加到所需的包中即可:

现在在 XE5 中,我尝试了其他包,如 vcldesigner.dcp,但我似乎无法找到包含 ActnEdt 的包。奇怪的是,它在 FMXReg.pas 中使用。

是否有不同的方法来调用标准 TActionList 编辑器窗口?

0 投票
2 回答
675 浏览

delphi - 如何使用 ToolsApi 将键绑定 Shift+Ctrl+HX 添加到 Delphi IDE?

向 Delphi IDE 添加一个新的 ShortCut 并不太难,因为 Open Tools API 为此提供了一个服务。我正在尝试一些显然更复杂的东西:添加一个 Wordstar,如附加快捷方式:

我希望用户按下时发生一些事情

Shift+Ctrl+H 后跟单个键 X

无论 Shift 键的状态如何,X 都应该起作用。

这是我的代码:

所以,如果我设置 ShiftState := [ssCtrl] 按下

Ctrl+HX

调用我的 TwoKeyBindingHandler 方法。

但是使用 ShiftState := [ssShift, ssCtrl] 按下

Shift+Ctrl+HX

什么也没做。

奇怪的是,当指定 ShiftState := [ssShift, ssCtrl] (应该只影响第一个键)按下

Shift+Ctrl+H Shift+X

调用我的 TwoKeyBindingHandler 方法,即使第二个 ShortCut 添加时没有修饰键。

任何想法?这可能是 Delphi IDE/Open Tools API 的已知限制/错误吗?有已知的解决方法吗?

我在 Delphi 2007 和 Delphi 10 Seattle 中尝试过,没有区别。

0 投票
2 回答
432 浏览

delphi - Delphi OTAPI AddMenuCreatorNotifier 已弃用,替代品是什么?

我正在关注关于如何使用 IOTAProjectManager 在 Delphi IDE 中扩展项目菜单 的CodeCentral 文章。

code-central 上的示例向导代码执行以下操作:

注册上下文菜单(例如项目菜单之一)的新技术是什么?请注意,这已被弃用,甚至没有出现在 docwiki 上。

所需结果的屏幕截图:

在此处输入图像描述

更新:我找不到任何最新的教程,包括代码。Embarcadero 的网站上有一份 PDF 白皮书,但来自 Bruno Fierens 的白皮书中的代码示例不在网络上的任何地方。我在下面给出了一个工作示例的答案,该示例位于 bitbucket 上,您可以下载下面的 zip。

0 投票
1 回答
206 浏览

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

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

代码是:

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

当我做:

我得到:

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

0 投票
0 回答
97 浏览

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

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

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