2012-03-28 5 views
12

Delphi IDE Theme Editor을 Rad Studio IDE (이 도구의 현재 버전이 외부 응용 프로그램으로 실행 됨)에 통합하기위한 플러그인을 작성하고 있습니다. 지금까지 모든 것이 올바르게 작동합니다 (아래 이미지 참조) t는 당신이 어떤 요소를 사용자 정의 할 수 있습니다 (편집자 옵션 -> 색상) 구문 강조 색상을 변경하기 위해 표준 옵션으로,OTA (Open Tools API)를 사용하여 수정 된 구문 하이라이트 색상을 Delphi IDE에서 새로 고침하는 방법을 알려주십시오.

enter image description here

가 설명해 드리죠 델파이 IDE에서 선택된 구문 강조 색상을 갱신하는 방법을 알아낼 새로운 전경색과 배경색을 지정한 다음 을 누르면됩니다. OK. 단추 IDE가 변경 사항을 적용하면 IDE 편집기 창이 새 설정으로 업데이트됩니다.

현재 새 값을 수정하고 저장할 수 있지만 델파이 IDE에 새로운 구성을 적용하도록 지시 할 수는 없으며 변경 사항은 IDE가 다시 시작될 때만 표시됩니다.

ToolsAPI 장치를 검색 한 결과 IOTAEditOptions, IOTAHighlighterIOTAHighlightServices 인터페이스가 발견되었지만 수정 된 설정을 새로 고치는 (다시로드하는) 옵션이없는 것 같습니다.

또한 나는 (tdump를 사용하여) unmangle을 시도하고 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가 @Internization에 대한 색상 설정 만로드하기 때문에 @NGLN이 작동하지 않을 것이라고 생각합니다. 또한 OTAPI에 이러한 속성을 다시 초기화 할 수있는 인터페이스가 있다고 생각하지 않습니다. – LaKraven

+0

수정 사항 : 환경 옵션 대화 상자를 닫을 때 해당 설정이 다시 초기화 된 것처럼 보입니다. 속임수는 플러그인을 가지고 환경 옵션 대화 상자를 불러 와서 사용자가 수동으로 닫도록하는 것일 수 있습니다. 대단히 우아하지는 않지만 효과적이어야합니다. – LaKraven

답변

2

원하는 효과가있는 약간의 해킹은 환경 옵션 대화 상자를 불러 와서 운영자가 수동으로 닫게하는 것입니다. 이로 인해 IDE는 제출 된 설정을 기반으로 구성을 다시 초기화합니다.

이 ... 이렇게 프로젝트 ( IOTAProject 개체)에 대한 핸들을 얻고 호출에 AProjectAProject: IOTAProject으로 정의된다

AProject.ProjectOptions.EditOptions;

.

나는 이것이 가장 우아한 해결책이 아니라는 것을 알고 있지만, 원하는 효과가 있다면, 적어도 다소 실용적이다.

+0

Simon, 좋은 제안이지만 IDE가 색상 설정의 "원래"컨트롤에서 변경 사항을 감지하지 못하면 IDE가 새로 고쳐지지 않습니다. (Syntax 하이라이트 색상을 설정하기 위해 자신의 컨트롤을 사용하고 있음을 기억하십시오) – RRUZ

+0

@Simon, ProjectOptions.EditOptions는 TDelphiProjectOptionsDialog를 엽니 다.하지만 환경 옵션 대화 상자는 TDefaultEnvironmentDialog입니다 ... 나는 그것이 같은 짐승이라고 생각하지 않습니다. –

+0

설정을 저장하는 방법에 따라 다릅니다. IDE가 자체 설정을 저장하는 레지스트리에 있다면 변경 사항을 적용해야합니다 (그게 내 경험이었습니다) 어쨌든 – LaKraven

2

내가 가장 좋은 건 스눕하는 것입니다라고 말하고 싶지만 주위 coreide*[email protected]@[email protected] 또는 coreide*[email protected]@[email protected]

확인 버튼을 클릭 될때이가 전화를받을. 난 어셈블리를 읽는 것이 좋지 않지만 IDE의 초기화 중에는 환경 옵션이 레지스터에서로드되고 필요한 모든 변경 사항은 필요에 따라 다시 작성되지만 IDE는 메모리 인스턴스 인 TEnvironmentOptions에 따라 권한이 있습니다. 모든 환경 옵션의 표현.

coreide*[email protected]@[email protected]

은 색상이 TEditorColor

그것은이 클래스의 불행한 어느 것도 OTA 또는 NTA에 노출되지 않는 것에 의해 편집에 대한 환경 옵션에서 검색되는 곳 것으로 보인다.

+1

감사합니다. 지난 몇 달 동안 이러한 방법 중 일부를 발견했습니다. 낮은 수준의 해킹을 사용하지 않기를 바랬습니다. 하지만 유일한 옵션 인 것 같습니다. – RRUZ