プロジェクト内で使用中のフォームのキャプションの一覧

解決


かず  2012-01-10 06:03:59  No: 41432

Delphi2010  WinXP環境です。
プロジェクト内で使用中のフォームのキャプションの一覧を作成したいのですが、どのようにすれば良いでしょうか。


Nov  2012-01-10 19:43:33  No: 41433

もし、CaptionがASCIIなら、DOSプロンプトで
プロジェクトフォルダに移動して、

findstr /b /c:"  Caption = " > Caption.txt

で、Caption.txtに、一覧を取得できます。
非ASCIIなら、#で始まるコードをUNICODEに変換しないと読めませんが。
(#nnnnn を &#nnnnn; に置き換えてhtml形式にするとか)


Nov  2012-01-10 19:51:08  No: 41434

すみません、間違えました。
正しくは、

findstr /b /c:"  Caption = " *.dfm > Caption.txt

ですね。


かず  2012-01-11 05:16:33  No: 41435

Novさん
早速試して見ます。


Nov  2012-01-11 14:27:59  No: 41436

良く考えたら、前述の方法では、プロジェクトから削除したフォームも拾ってしまうため、プロジェクトファイルもチェックしないと確実とは言えません。

例えば、VBスクリプト(ここでは場違いかもしれませんが...)で、一覧を出力する方法は次のようになります。
テキスト整形部分は、用途に合わせて書き換えてください。
尚、ASCIIとUNICODEの境界を判別していないので、'#12345'のようなキャプションがあると文字化けしますので注意。

set Fs = CreateObject("Scripting.FileSystemObject")
' 作業パス
FullName = WScript.ScriptFullName
Folder = Left(FullName, instrrev(FullName, "\"))
' 結果保存用
set Caption = Fs.CreateTextFile(Folder & "Caption.txt")
' プロジェクトファイルの取得
for each F in Fs.GetFolder(Folder).Files
  if Fs.GetExtensionName(F) = "dproj" then
     set Dproj = Fs.OpenTextFile(F)
     All = Dproj.ReadAll
     Dproj.Close
     exit for
   end if
next
' プロジェクトフォルダ内のパラメータファイルを取得
for each F in Fs.GetFolder(Folder).Files
  if Fs.GetExtensionName(F) = "dfm" then
  Set Text = Fs.OpenTextFile(F)
  do
    Line = Text.ReadLine
    ' フォーム名の取得
    if Instr(Line, "object ") = 1 then
      head = Instr(Line, " ")+1
      tail = Instr(Line, ":")
      tmp1 = Mid(Line, head, tail-head)
    end if
    ' 当該フォームがプロジェクトに含まれるかチェック
    if Instr(All, "<Form>" & tmp1 & "</Form>") = 0 then exit do
    ' キャプションの取得
    if Instr(Line, "Caption = ") = 3 then
      set Re = New RegExp
      Re.Pattern = "#\d+\d+\d+\d+\d*\d*\d*"
      Re.Global = True
      set Unicodes = Re.Execute(Line)
      tmp2 = LTrim(Line)
      for each Unicode in Unicodes
        Decimal = Replace(Unicode.Value, "#", "")
        tmp2 = Replace(tmp2, Unicode.Value, ChrW(Decimal))
      next
      ' テキスト整形
      tmp1 = tmp1 & Space(10-Len(tmp1))
      tmp2 = Replace(tmp2, "'", "")
      Caption.WriteLine(tmp1 & " : " & tmp2)
      exit do
    end if
  loop until Text.AtEndOfStream
  Text.Close
end if
next
Caption.Close

プロジェクトフォルダ内で実行してみてください。


かず  2012-01-12 05:45:36  No: 41437

Novさん
VBでの例ありがとうございました。
Delphiしか知らないので、時間がかかりそうですがチャレンジしたいと思っています。^^;


Nov  2012-01-12 20:47:30  No: 41438

かずさん
もしかして、勘違いしされているかもしれないので、念のため。
前述のVBスクリプトは、拡張子vbsの適当な名前(hoge.vbs)でテキスト形式で保存し、
バッチファイル感覚で実行するだけです。
実行後、caption.txtという、結果のテキストファイルが作成されます。

いずれにしてもVBSなんて持ち出して済みません。
Delphiで文字変換するのがめんどくさかったもので...


かず  2012-01-15 01:17:26  No: 41439

Novさん
ご指摘のとおり勘違いをしておりました。
お示ししていただいたVBスクリプトで、動作を確認しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加