delphi - 如何使用OTA(开放工具API)指示Delphi IDE刷新修改后的语法高亮颜色?

标签 delphi delphi-xe delphi-xe2 toolsapi

我正在编写一个插件来集成 Delphi IDE Theme Editor使用 Rad Studio IDE(该工具的当前版本作为外部应用程序运行)到目前为止,一切都工作正常(参见下图),除了我不知道如何刷新所选语法突出显示颜色的事实德尔福集成开发环境

enter image description here

让我解释一下,在更改语法突出显示颜色的标准选项(编辑器选项 -> 颜色)中,您可以自定义任何元素并分配新的前景色和背景色,然后如果按 。确定。 按钮 IDE 应用更改,并且 IDE 编辑器窗口将更新为新设置。

目前我可以修改和存储新值,但我无法指示 Delphi IDE 应用新配置,只有重新启动 IDE 后更改才可见。

我搜索了ToolsAPI单元,发现了IOTAEditOptionsIOTAHighlighterIOTAHighlightServices接口(interface),但似乎没有一个包含刷新选项(重新加载) 修改后的设置。

我还尝试了 unmangle (使用 tdump)并直接调用 coreide1XX.bpl 文件的函数,但这也不起作用。

00420B94 17411 1F39 Editcolorpage::TEditorColor::
00422188 17400 1F3A __fastcall Editcolorpage::TEditorColor::ColorClick(System::TObject *)
0042174C 17407 1F3B __fastcall Editcolorpage::TEditorColor::ColorSpeedSettingClick(System::TObject *)
004224BC 17396 1F3C __fastcall Editcolorpage::TEditorColor::DefaultClick(System::TObject *)
00422414 17397 1F3D __fastcall Editcolorpage::TEditorColor::EditorColorBroadcast(System::TObject *, Winapi::Messages::TMessage&)
00421584 17409 1F3E __fastcall Editcolorpage::TEditorColor::EditorColorCreate(System::TObject *)
00421730 17408 1F3F __fastcall Editcolorpage::TEditorColor::EditorColorDestroy(System::TObject *)
004217B0 17406 1F40 __fastcall Editcolorpage::TEditorColor::ElementListClick(System::TObject *)
004222E8 17399 1F41 __fastcall Editcolorpage::TEditorColor::FontClick(System::TObject *)
004225DC 17395 1F42 __fastcall Editcolorpage::TEditorColor::HelpClick(System::TObject *)
00421AE8 17404 1F43 __fastcall Editcolorpage::TEditorColor::InitLineFlags(const System::DelphiInterface<Toolsapi::IOTAHighlighterPreview>)
004219B8 17405 1F44 __fastcall Editcolorpage::TEditorColor::InitSamplePane()
00421BC8 17403 1F45 __fastcall Editcolorpage::TEditorColor::InitSyntaxEditView(const System::DelphiInterface<Toolsapi::IOTAHighlighterPreview>)
0042262C 17393 1F46 __fastcall Editcolorpage::TEditorColor::LoadHighlightPreviews()
004225F4 17394 1F47 __fastcall Editcolorpage::TEditorColor::MarkDirty()
004220E4 17401 1F48 __fastcall Editcolorpage::TEditorColor::SampleClick(System::TObject *)
00422080 17402 1F49 __fastcall Editcolorpage::TEditorColor::SetColorSpeedSetting(Vedopts::TColorSpeedSetting)
0042238C 17398 1F4A __fastcall Editcolorpage::TEditorColor::UpdateSamplePane()
00422814 17392 1F4B __fastcall Editcolorpage::TEditorColor::tbsetPreviewsChange(System::TObject *, int, bool&)
004AA8D4 17390 1F4C __fastcall Editcolorpage::initialization()
00423C38 17413 1F4D __fastcall Editdisplaypage::Finalization()

如何使用 OTA(开放工具 API)指示 Delphi IDE 刷新修改后的语法突出显示颜色?

如果您需要更多信息或者问题不清楚,请告诉我。

最佳答案

应该具有预期效果的一个小技巧是让您的插件调出“环境选项”对话框,并让运算符(operator)手动将其关闭。这会导致 IDE 根据提交的设置重新初始化其配置。

为此,请获取项目(IOTAProject 对象)的句柄并调用...

AProject.ProjectOptions.EditOptions;

其中 AProject 定义为 AProject: IOTAProject

我知道这不是最优雅的解决方案,但如果它达到了预期的效果,至少有点实用。

关于delphi - 如何使用OTA(开放工具API)指示Delphi IDE刷新修改后的语法高亮颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9914559/

相关文章:

delphi - GetMem 用于一个 PChar 变量更改其他 PChar 变量的内容

delphi - 我可以强制 `const` 通过引用传递(又名丢失的 `in` 参数)

xml - 为什么 "encoding"方法得到的字符串中没有 "IXMLDocument.SaveToXML"属性?

delphi - 如何在delphi中调用事件而无需用户干预?

delphi - 如何为所有私有(private)/ protected 方法生成 Rtti 信息?

excel - Delphi 和 Excel.FormatConditions

delphi - 我能否找出在第 3 方 VCL 组件中,当我关闭包含该组件的项目时,导致 Delphi IDE 停止响应的原因?

delphi - 为什么TPanel在Delphi XE中无法显示正确的帧/边框?

delphi - 围绕位图调整 Canvas 大小?

Delphi XE 中 TClientDataSet(CDS 文件)的 SQL 查询?