2012-03-28 9 views
12

Delphi IDE Theme EditorとRad Studio IDE(このツールの現在のバージョンは外部アプリケーションとして実行されています)を統合するためのプラグインを作成していますが、これまでのところすべてがうまく機能しています(下の画像を参照) tはあなたが任意の要素をカスタマイズすることができます(編集オプション - >色)を構文ハイライトの色を変更するための標準的なオプションで、OTA(Open Tools API)を使用して、変更された構文強調表示の色をDelphi IDEで更新する方法を教えてください。

enter image description here

は私に説明してみましょうデルファイIDEで選択されたシンタックスハイライト色をリフレッシュ方法を見つけ出すと、新しい前景色と背景色を割り当て、次にを押します。 OK 。ボタンIDEが変更を適用すると、IDEエディタウィンドウが新しい設定で更新されます。

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

IはToolsAPIユニットを検索し、iがIOTAEditOptionsIOTAHighlighterIOTAHighlightServicesインターフェースを発見したが、どれもリフレッシュするオプション(リロード)設定の変更が含まれるようです。

また、私は(tdumpを使用して)解き放ち、coreide1XX.bplファイルの関数を直接呼び出してみましたが、これもうまくいきませんでした。

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

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() 

は、あなたがより多くの情報が必要な場合や質問が明確でない場合は、私に教えてください。

+0

これは長時間ですが、IOTAEditViewを呼び出すこともできます。アクティブなモジュールエディタごとにペイントしますか? – NGLN

+0

私が理解しているように、IDEは初期化時にカラー設定を読み込むだけなので、@NGLNは動作しません。また、OTAPIにこれらの属性を再初期化するためのインタフェースがあるとは思われません。 – LaKraven

+0

修正:これらの設定は、[環境オプション]ダイアログボックスを閉じると再初期化されたように見えます。不正行為は、あなたのプラグインにEnvironment Optionsダイアログを表示させて、それを手動で閉じるように指示することかもしれません。ひどく上品ではありませんが、効果的でなければなりません。 – LaKraven

答えて

2

ほんの少しのハックは、あなたのプラグインがEnvironment Optionsダイアログを開き、オペレータが手動で閉じるようにすることです。これにより、IDEは送信された設定に基づいて構成を再初期化します。 AProjectAProject: IOTAProjectとして定義され、これを行うプロジェクト(IOTAProjectオブジェクト)へのハンドルを取得し、呼び出し

...

AProject.ProjectOptions.EditOptions;

私はこれが最も優雅な解決法ではないことを知っていますが、それが望む効果がある場合、少なくともいくらか実用的です。

+0

Simon、良い提案ですが、IDEが色設定の「元の」コントロールの変更を検出しない場合、IDEは更新されません。 (Syntaxのハイライトカラーを設定するために私自身のコントロールを使用しています) – RRUZ

+0

@Simon、ProjectOptions.EditOptionsはTDelphiProjectOptionsDialogを開きますが、Environment OptionsダイアログはTDefaultEnvironmentDialogです...私は同じ獣ではないと思います。 –

+0

設定を保存する方法によって異なります。 IDEが独自の設定を保存しているレジストリにいる場合、変更は有効である必要があります(それは私の経験です) – LaKraven

2

は、私はあなたの最善の策は、スヌープするだろうと言うだろう周りcoreide*[email protected]@[email protected]またはcoreide*[email protected]@[email protected]

OK]ボタンをクリックした時に取得し、これらが呼び出されます。私はアセンブリを読むのはあまり良くありませんが、IDEの初期化中に環境オプションがレジスタからロードされ、必要に応じて変更が書き戻されますが、IDEはメモリー内のインスタンスTEnvironmentOptionsに依存しますすべての環境オプションの表現。

coreide*[email protected]@[email protected]は色がそれは、これらのクラスの不幸いずれもOTAまたはNTAにさらされていないのですTEditorColor

で編集するための環境オプションから取得される場所であるように思われます。

+1

ありがとう、私はこれらの方法のいくつかが最後の数ヶ月で見つけました。私は低レベルのハックを使わないことを望んでいました。それは唯一の選択肢と思われます。 – RRUZ

関連する問題