2012-03-28 1 views
12

Я вставляю плагин для интеграции Delphi IDE Theme Editor с Rad Studio IDE (текущая версия этого инструмента работает как внешнее приложение), пока все работает нормально (см. Ниже изображение), за исключением того, что я могу " т выяснить, как обновить выбранные синтаксических цвета выделения в среде DelphiКак проинформировать IDE Delphi обновленные цвета подсветки синтаксиса с помощью OTA (API открытых инструментов)?

enter image description here

Позвольте мне объяснить, в стандартной опции для изменения синтаксиса цвета выделения (Редактор Options-> Color) вы можете настроить любой элемент и назначьте новый цвет переднего и заднего фона, затем нажмите . ОК . кнопка IDE применяет изменения, а окна редактора IDE обновляются с новыми настройками.

В настоящее время я могу изменять и сохранять новые значения, но я не могу проинструктировать среду разработки Delphi для применения новой конфигурации, изменения видны только в том случае, если среда IDE перезагружена.

Я искал блок ToolsAPI, и я нашел интерфейсы IOTAEditOptions, IOTAHighlighter и IOTAHighlightServices, но ни один из них не включает в себя возможность обновления (перезагрузки) измененной настройки.

Также я пробовал 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() 

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

Позвольте мне знать, если вам нужно больше информации, или если вопрос не ясен.

+0

Это длинный снимок, но, возможно, вызывается 'IOTAEditView.Paint' для каждого активного редактора модулей? – NGLN

+0

Я не думаю, что это будет работать @NGLN, потому что, как я понимаю, IDE загружает только настройки цвета при инициализации. Я также не считаю, что в OTAPI есть какой-либо интерфейс, который позволяет вам повторно инициализировать эти атрибуты. – LaKraven

+0

Коррекция: эти параметры, как представляется, повторно инициализируются при закрытии диалогового окна «Параметры среды». Обманом может быть просто, чтобы ваш плагин отобразил диалоговое окно «Параметры среды» и попросил пользователя закрыть его вручную. Не очень элегантный, но должен быть эффективным. – LaKraven

ответ

2

Небольшой взлом, который должен иметь желаемый эффект, заключается в том, чтобы ваш плагин отобразил диалоговое окно «Параметры среды» и оператор закроет его вручную. Это заставляет IDE повторно инициализировать свою конфигурацию на основе представленных параметров.

Чтобы сделать это, получить ручку на Project (IOTAProject объекта) и позвонить ...

AProject.ProjectOptions.EditOptions;

Где AProject определяется как AProject: IOTAProject.

Я знаю, что это не самые изящные решения, но если он имеет желаемый эффект, по крайней мере, он практически практичен.

+0

Саймон, хорошее предложение, но если среда IDE не обнаруживает изменений в «исходных» элементах управления настройками цвета, это не обновляет среду IDE. (помните, что я использую свои собственные элементы управления для установки цветов подсветки синтаксиса) – RRUZ

+0

@Simon, ProjectOptions.EditOptions открывает TDelphiProjectOptionsDialog, но диалог параметров среды - это TDefaultEnvironmentDialog ... Я не думаю, что это тот же самый зверь. –

+0

Это зависит от того, как вы сохраняете настройки. Если они находятся в реестре, где среда IDE сохраняет свои собственные настройки, тогда изменения СЛЕДУЕТ вступить в силу (это был мой опыт, так или иначе) – LaKraven

2

Я бы сказал, что вам лучше всего будет шпионить вокруг coreide*[email protected]@[email protected] или coreide*[email protected]@[email protected]

Они вызываются, когда кнопка Ok получает щелчок. Я не очень хорошо читаю сборку, но из-за того, что параметры среды загружаются из реестра во время инициализации IDE, и любые сделанные изменения записываются по мере необходимости, но среда IDE зависит от экземпляра памяти TEnvironmentOptions как авторитетного представление всех параметров среды.

coreide*[email protected]@[email protected], кажется, где цвета извлекаются из вариантов среды для редактирования TEditorColor

Это не прискорбно ни один из этих классов подвергается OTA или NTA.

+1

Спасибо, я нашел некоторые из этих методов в последние месяцы. Я надеялся не использовать хакеры на низком уровне. но это единственный вариант. – RRUZ

 Смежные вопросы

  • Нет связанных вопросов^_^