12

を Rad Studio IDE (外部アプリケーションとして実行されるこのツールの現在のバージョン) と統合するためのプラグインを作成していますがDelphi IDE Theme Editor、これまでのところすべて正常に動作しています (下の画像を参照)。 Delphi IDE で選択した構文ハイライトの色を更新する方法

ここに画像の説明を入力

説明させてください。構文ハイライトの色を変更する標準オプション ([エディター オプション] -> [色]) では、任意の要素をカスタマイズして、新しい前景色と背景色を割り当てることができます。. OK .ボタンを押すと、IDE は変更を適用し、IDE エディターはウィンドウは新しい設定で更新されます。

現在、新しい値を変更して保存することはできますが、Delphi IDE に新しい構成を適用するように指示することはできません。変更は、IDE を再起動した場合にのみ表示されます。

ToolsAPI ユニットを検索したところIOTAEditOptionsIOTAHighlighterおよびIOTAHighlightServicesインターフェイスが見つかりましたが、変更された設定を更新 (リロード) するオプションが含まれているようには見えません。

また、(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()

How I can instruct to the Delphi IDE refresh the modified syntax highlight colors using OTA (Open Tools API)?

さらに情報が必要な場合、または質問が明確でない場合はお知らせください。

4

2 に答える 2

2

あなたの最善の策は、スヌープするcoreide*.@Envoptions@TEnvironmentOptions@EditorSourceOptionsBeforeSaveか、coreide*.@Envoptions@TEnvironmentOptions@EditorSourceOptionsAfterSave

これらは、[OK] ボタンがクリックされると呼び出されます。私はアセンブリを読むのが得意ではありませんが、環境オプションは IDE の初期化中にレジスタから読み込まれ、加えられた変更は必要に応じて書き戻されますが、IDE はTEnvironmentOptions信頼できる表現であるためにメモリ内インスタンスに依存しています。すべての環境オプションの。

coreide*.@Envoptions@TEnvironmentOptions@GetEdColors編集用の環境オプションから色が取得される場所のようですTEditorColor

残念ながら、これらのクラスのいずれも OTA または NTA に公開されていません。

于 2014-03-27T19:08:25.040 に答える
2

望ましい効果が得られるはずのちょっとしたハックは、プラグインに [環境オプション] ダイアログを表示させ、オペレーターに手動で閉じさせることです。これにより、IDE は送信された設定に基づいて構成を再初期化します。

これを行うには、プロジェクト (IOTAProjectオブジェクト) のハンドルを取得して呼び出します...

AProject.ProjectOptions.EditOptions;

AProjectとして定義されますAProject: IOTAProject

これが最も洗練されたソリューションではないことはわかっていますが、望ましい効果が得られる場合、少なくともある程度実用的です。

于 2012-03-28T21:24:14.363 に答える