Open Tools API その3:ソースエディタへのアクセス
モジュール
モジュールとはIDEがアクセスする抽象的なエディタの組み合わせのことで、Delphi/C++Builderのプロジェクトにおけるユニットに相当。ユニットがソースファイル(*.pas/*.cpp)やヘッダファイル(*.h)、フォームファイル(*.dfm)の組み合わせであるように、モジュールは1つ以上のテキストエディタとフォームエディタなどから構成される。
モジュールに対するインターフェースを提供するのがIOTAModuleで、IDEからはIOTAModuleServiceより取得します。以下は、IDEが参照しているファイルの一覧を列挙する例。
procedure TfrmEditorStatus.Button6Click(Sender: TObject); var I, J: Integer; ModuleServices: IOTAModuleServices; Editor: IOTAEditor; SourceEditor: IOTASourceEditor; FormEditor: IOTAFormEditor; begin // モジュールの取得 ModuleServices := (BorlandIDEServices as IOTAModuleServices); with ModuleServices do begin // IDEが開いているモジュールの列挙 for I := 0 to ModuleCount - 1 do begin Memo1.Lines.Add(Modules[I].FileName); // モジュールが参照するエディタの列挙 for J := 0 to Modules[I].GetModuleFileCount - 1 do begin Editor := Modules[I].GetModuleFileEditor(J); if Supports(Editor, IOTASourceEditor, SourceEditor) then begin // エディタはソースエディタ Memo1.Lines.Add('SourceEditor - ' + SourceEditor.FileName); end else if Supports(Editor, IOTAFormEditor, FormEditor) then begin // エディタはフォームエディタ Memo1.Lines.Add('FormEditor - ' + FormEditor.FileName); end else begin // 不明 Memo1.Lines.Add('Unknown - ' + Editor.FileName); end; end; end; end; end;
エディタの種類の判別には、Supports関数でそれぞれのインターフェースをサポートするかどうかで判別する。
ソースエディタ、ビュー
ソースエディタのインターフェースがIOTASourceEditorで、ソースエディタは複数個のビュー(IOTAEditView)から構成される。EditViewCountプロパティがビューの個数で、この値が0の場合はサブビューが隠れていることを表しす。ビューそのものはEditViews[n]でアクセスする。
ビューがエディタそのもので、カーソル位置やセレクション情報、内部バッファなどの情報をもつ。
IOTAEditViewの主なプロパティ
プロパティ | 型名 | 内容 |
---|---|---|
Block | IOTAEditBlock | ブロック:エディタの選択範囲 |
Buffer | IOTABuffer | バッファ:エディタの内部バッファ |
Position | IOTAEditPosition | カーソル位置 |
TopRow | Integer | 最上部に表示されている行の行番号 |
RightColumn | Integer | ビューの右端の桁番号 |