2012-03-28 11 views
12

Sto scrivendo un plug-in per integrare lo Delphi IDE Theme Editor con l'IDE di Rad Studio (la versione corrente di questo strumento viene eseguito come un'applicazione esterna), quindi tutto funziona correttamente (vedi l'immagine qui sotto), eccetto il fatto che posso t capire come aggiornare i colori di evidenziazione della sintassi selezionati nella IDE di DelphiCome istruire l'IDE Delphi per aggiornare i colori dell'evidenziazione della sintassi modificata usando OTA (Open Tools API)?

enter image description here

mi spiego meglio, in opzione standard di cambiare i colori delle sintassi (Editor Opzioni-> Colore) è possibile personalizzare ogni elemento e assegnare un nuovo colore di primo piano e di sfondo, quindi se si preme il . OK . l'IDE applica le modifiche e le finestre dell'editor IDE vengono aggiornate con nuove impostazioni.

Attualmente è possibile modificare e memorizzare i nuovi valori, ma non è possibile istruire l'IDE Delphi per applicare la nuova configurazione, le modifiche sono visibili solo se l'IDE viene riavviato.

Ho cercato l'unità ToolsAPI e ho trovato le interfacce IOTAEditOptions, IOTAHighlighter e IOTAHighlightServices ma nessuna sembra includere un'opzione per aggiornare (ricaricare) l'impostazione modificata.

Inoltre, ho provato a sbrogliare (usando tdump) e chiamare direttamente le funzioni del file coreide1XX.bpl, ma questo non ha funzionato.

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

fatemi sapere se avete bisogno di maggiori informazioni o se la questione non è chiara.

+0

È una soluzione lunga, ma forse chiamata 'IOTAEditView.Paint' per ogni editor di moduli attivo? – NGLN

+0

Non penso che funzionerà @ NGLN, perché, a quanto ho capito, l'IDE carica solo le impostazioni dei colori sull'initalizzazione. Inoltre, non credo ci sia un'interfaccia in OTAPI che ti permetta di reinizializzare quegli attributi. Correzione – LaKraven

+0

: Queste impostazioni sembrano essere reinizializzate quando si chiude la finestra di dialogo Opzioni ambiente. Un trucco potrebbe essere quello di avere il proprio plugin per aprire la finestra di dialogo Opzioni Ambiente e chiedere all'utente di chiuderlo manualmente. Non molto elegante, ma dovrebbe essere efficace. – LaKraven

risposta

2

Un piccolo hack che dovrebbe avere l'effetto desiderato sarebbe avere il proprio plugin che richiama la finestra di dialogo Opzioni Ambiente e fare in modo che l'operatore lo chiuda manualmente. Ciò fa sì che l'IDE reinizializzi la sua configurazione in base alle impostazioni inviate.

Per fare questo, ottenere una maniglia su un progetto (IOTAProject oggetto) e lo chiamano ...

AProject.ProjectOptions.EditOptions;

Dove AProject è definito come AProject: IOTAProject.

So che questa non è la soluzione più elegante, ma se ha l'effetto desiderato, almeno è un po 'pratico.

+0

Simon, buon suggerimento, ma se l'IDE non rileva le modifiche nei controlli "originali" delle impostazioni del colore non aggiorna l'IDE. (ricorda che sto usando i miei controlli per impostare i colori di evidenziazione della sintassi) – RRUZ

+0

@Simon, ProjectOptions.EditOptions apre un TDelphiProjectOptionsDialog, ma la finestra di dialogo Opzioni di ambiente è un TDefaultEnvironmentDialog ... Non penso che sia la stessa bestia. –

+0

Dipende da come si stanno salvando le impostazioni. Se sono nel registro in cui l'IDE salva le proprie impostazioni, allora le modifiche DOVREBBE l'effetto (questa è stata la mia esperienza, comunque) – LaKraven

2

direi la soluzione migliore sarebbe quella di curiosare coreide*[email protected]@[email protected] o coreide*[email protected]@[email protected]

Questi vengono chiamati quando il pulsante Ok viene cliccato. Non sono molto bravo a leggere assembly ma dal suo aspetto le opzioni dell'ambiente vengono caricate dal registro durante l'inizializzazione dell'IDE e tutte le modifiche apportate vengono riscritte secondo necessità ma l'IDE dipende dall'istanza in memoria di TEnvironmentOptions per essere autorevole rappresentazione di tutte le opzioni ambientali.

coreide*[email protected]@[email protected] sembra essere dove i colori vengono recuperati dalle opzioni d'ambiente per l'editing da TEditorColor

E 'un peccato nessuna di queste classi è esposto al OTA o NTA.

+1

Grazie, ho trovato alcuni di questi metodi negli ultimi mesi. Speravo di non usare un hack di basso livello. ma sembra l'unica opzione. – RRUZ