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

解決


かず  2012-01-09 21:03:59  No: 41432  IP: 192.*.*.*

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

編集 削除
Nov  2012-01-10 10:43:33  No: 41433  IP: 192.*.*.*

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

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

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

編集 削除
Nov  2012-01-10 10:51:08  No: 41434  IP: 192.*.*.*

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

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

ですね。

編集 削除
かず  2012-01-10 20:16:33  No: 41435  IP: 192.*.*.*

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

編集 削除
Nov  2012-01-11 05:27:59  No: 41436  IP: 192.*.*.*

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

例えば、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-11 20:45:36  No: 41437  IP: 192.*.*.*

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

編集 削除
Nov  2012-01-12 11:47:30  No: 41438  IP: 192.*.*.*

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

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

編集 削除
かず  2012-01-14 16:17:26  No: 41439  IP: 192.*.*.*

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

編集 削除