pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


古いDelphiプロジェクトを調査するUnicode Statistics Toolが少し使いにくい点を修正する

Delphi のバージョン 2007 より前のバージョンで開発されたプロジェクトは標準の文字コードAnsiなので、マイグレーション時にはこれをUnicode対応する必要がありますが、その予備調査に使用できるUnicode Statistics Toolが下記のURLから入手できます。 https://cc.embarcadero.com/item/27398

しかし、このツールのUIは次の点が使いづらいです。

  • 調査対象のプロジェクトを含むディレクトリの指定は、SelectDirectory() で表示されるダイアログからしか行えない
  • SelectDirectory() は階層の深いディレクトリを辿るのがめんどくさい

幸いなことに、このツールはソースコードを含む形で配布されているので、ソースコードを変更してこの問題を解決することにします。本当は変更後のソースコードGitHub リポジトリにのせておけばよいと思うのですが、元アーカイブのライセンス条件が不明のため、変更差分の情報のみをメモとして残します。

ディレクトリを Explorer などからコピペできるようにする

UIの雰囲気から考えるとディレクトリ名を表示する TEdit (edtDirectory) にコピペするだけで動きそうに見えるのですが、このツールはそのような動作をしません。

このツールでは procedure RefreshFileList を実行して対象ファイルのファイルをリストアップした状態で動作するように実装されているからです。

そこで edtDirectory の onChange イベントに下記の実装を追加することにします。

procedure TForm2.edtDirectoryChange(Sender: TObject);
begin
  RefreshFileList;
end;

これで TEdit にディレクトリのフルパスをコピペするだけで動作するようになります。

Change ボタンで SelectDirectory ではなく OpenDialog を使用するように変える

Change (btnChangeDir) は SelectDirectory() で対象のディレクトリを指定するように実装されていますが、このUIは使いづらいと思うので、OpenDialog を利用する実装に変えます。

以下の実装は btnChangeDir の onClick の実装の変更例です。 予めフォームに TOpenDialog を配置した状態で以下の実装に変えるだけです。

procedure TForm2.btnChangeDirClick(Sender: TObject);
var
  Dir : String;
begin
  OpenDialog1.Title  := 'All files in the selected directory will be processed';
  OpenDialog1.Filter := '*.*';
processed';
  if (OpenDialog1.Execute) then
  begin
    edtDirectory.Text := ExtractFileDir(OpenDialog1.FileName);
    RefreshFileList;
  end;
end;