Help us understand the problem. What is going on with this article?

【Delphi】IDE プラグイン『dNotes』を 10.4 Sydney 対応にする

はじめに

以前スワンマン氏 (らいなタン氏) に作って頂き、とても重宝している『dNotes』10.4 Sydney で使えるようにするために、ちょっとだけ改変する事にしました。

10.3 Rio 対応の dNotes plugin Ver.0.0.7 をベースとします。

dNotes とは

『dNotes』は、プロジェクトマネージャでファイルにコメントを入れられるようにする IDE プラグインです。Delphi 2010 以降に対応しています。
image.png
アフォみたいにファイルのあるプロジェクトではとても重宝します。

コメントを入れるには、ファイルを右クリックして [コメントの編集] を選ぶか、マウスカーソルをコメントのカラム側に持っていった状態で〔F2〕を押します。コメント部分をマウスでクリックして編集モードにする事もできますが、コメントが入力されていない状態で編集モードにするのは難しいです (数 pixel しか許容しないので...)。

インストールの方法は『dNotes』付属の readme.txt をご覧ください。

改変

大した変更ではありませんが、旧バージョン (2010~10.3 Rio) でコンパイルしても影響がないようにします。

改変点 #1

23 行目から始まる IDE の定義に 10.4 Sydney の分を追加します。10.3 Rio の定義もちょっと変更しておきます。

UdNotes.pas
const
  {$IFDEF VER210}vclide = 'vclide140.bpl';{$ENDIF} // 2010
  {$IFDEF VER220}vclide = 'vclide150.bpl';{$ENDIF} // XE
  {$IFDEF VER230}vclide = 'vclide160.bpl';{$ENDIF} // XE2
  {$IFDEF VER240}vclide = 'vclide170.bpl';{$ENDIF} // XE3
  {$IFDEF VER250}vclide = 'vclide180.bpl';{$ENDIF} // XE4
  {$IFDEF VER260}vclide = 'vclide190.bpl';{$ENDIF} // XE5
  {$IFDEF VER270}vclide = 'vclide200.bpl';{$ENDIF} // XE6
  {$IFDEF VER280}vclide = 'vclide210.bpl';{$ENDIF} // XE7
  {$IFDEF VER290}vclide = 'vclide220.bpl';{$ENDIF} // XE8
  {$IFDEF VER300}vclide = 'vclide230.bpl';{$ENDIF} // 10 Seattle
  {$IFDEF VER310}vclide = 'vclide240.bpl';{$ENDIF} // 10.1 Berlin
  {$IFDEF VER320}vclide = 'vclide250.bpl';{$ENDIF} // 10.2 Tokyo
  {$IFDEF VER330}vclide = 'vclide260.bpl'; {$DEFINE NOHEADER} {$ENDIF} // 10.3 Rio    <-- 変更
  {$IFDEF VER340}vclide = 'vclide270.bpl'; {$DEFINE NOHEADER} {$ENDIF} // 10.4 Sydney <-- 追加

改変点 #2

957 行目から始まる Register() 手続きで、TreeView ヘッダのオプションに [hoVisible] を追加します。10.3 Rio 以降、プロジェクトマネージャの TreeView にヘッダが表示されなくなったため、カラムのリサイズもできなくなってしまったからです。

UdNotes.pas
  objTree.EditDelay := 250;
  objHeader.Options := objHeader.Options - [hoAutoResize];
{$IFDEF NOHEADER}
  objHeader.Options := objHeader.Options + [hoVisible];
{$ENDIF}
  objTree.TreeOptions.SelectionOptions := objTree.TreeOptions.SelectionOptions + [toFullRowSelect, toExtendedFocus];

・10.2 Tokyo
image.png
・10.4 Sydney
image.png

改変点 #3

1022 行目から始まる Register() 手続きで、TreeView ヘッダのオプションから [hoVisible] を外します。これをやっておかないと、アンインストールした時に TreeView にヘッダが表示されたままになってしまいます。

UdNotes.pas
{
        if (objColumns.Count < 2) or not (coVisible in objColumns[1].Options) then
          objHeader.Options := objHeader.Options + [hoAutoResize];
}
        if (objColumns.Count < 2) or not (coVisible in objColumns[1].Options) then
          begin
            objHeader.Options := objHeader.Options + [hoAutoResize];
          {$IFDEF NOHEADER}
            objHeader.Options := objHeader.Options - [hoVisible];
          {$ENDIF}
          end;

改変点 #4 (オプション)

『dNotes』は特定の拡張子のみコメントの編集を受け付けます。242 行目から始まる IsTargetExtension() 関数の中に対応させる拡張子を追加します。この改変では uses に (System.)StrUtils の追加が必要です。

UdNotes.pas
uses
{$IFDEF USENAMESPACE}
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.StrUtils, System.Classes,
  System.Generics.Collections, System.Rtti, System.TypInfo, Vcl.Controls,
  Vcl.Forms, Vcl.Menus, Vcl.ActnList, ToolsAPI;
{$ELSE}
  Windows, Messages, SysUtils, StrUtils, Classes, Generics.Collections, Rtti, TypInfo,
  Controls, Forms, Menus, ActnList, ToolsAPI;
{$ENDIF}

...

function IsTargetExtension(const FileName: string): Boolean;
{
var
  ext: string;
begin
  ext := LowerCase(ExtractFileExt(FileName));
  Result := (ext = '.pas') or (ext = '.dfm') or (ext = '.fmx') or (ext = '.h')
    or (ext = '.hpp') or (ext = '.c') or (ext = '.cpp');
}
const
  pas_exts: array [0..3] of string = ('.pas', '.int', '.dfm', '.fmx');
  cpp_exts: array [0..3] of string = ('.h', '.hpp', '.c', '.cpp');
var
  ext: string;
begin
  ext := LowerCase(ExtractFileExt(FileName));
  Result := MatchStr(ext, pas_exts) or MatchStr(ext, cpp_exts);
end;

改変点 #5 (オプション)

マウスカーソルが [ファイル] / [コメント] のどちらのカラムにあってもコメントの編集を行えるようにするには、コンテキストメニューに何らかのショートカットを割り当てます。

次の例では〔F6〕でコメント編集ができるようになります。

UdNotes.pas
function TProjectMenuCreatorNotifier.AddMenu(const Ident: string): TMenuItem;
begin
  Result := TMenuItem.Create(nil);
  if SameText(PreferredUILanguages, 'JA') then
    Result.Caption := sEditCommentJA
  else if SameText(PreferredUILanguages, 'DE') then
    Result.Caption := sEditCommentDE
  else
    Result.Caption := sEditCommentEN;
  Result.OnClick := MenuClick;
  Result.ShortCut := ShortCut(VK_F6, []); // <--- 追加
end;

おわりに

『dNotes』はとても便利です!

ht_deko
とある熊本の障害復旧(トラブルシューター)
https://ht-deko.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away