[BlueLeaf1336]> DOWNLOAD> UnUtility>

Delphi製実行ファイル限定DFMファイル救出ツール DfmComeBack

historyTOP

2006/09/25:作成

ダウンロードTOP

最新版:DfmComeBack20060925.zip(205,944bytes)※ソースコードと実行ファイルです。

能書きTOP

あーあ。あまりにしょうもないプログラムだったからソース消してしまったけど、フォームに置いた部品は絶妙な配置やったんやった。復活プリーズ。

そんな状況になったことはまったくないんですが、そういう用途のプログラムです。

元ねたは、かつで Borland のサイトからダウンロードできた VCLScanner というプログラムとそのソースコードです。これは、どんな名前の VCL がどれぐらいの頻度で使用されているかを自動で調べて Borland に報告できる、そんなツールだったんですが、最近見てみるとリンク切れになってました。

リンク切れになる前にダウンロードしていたのを最近見つけて、暇つぶしに何かできんかなぁと、まあその程度のものです。似たようなそしてよほど役に立つプログラムはいくらでもあったように思います。今オフラインなので例示できませんが。

スクリーンショットと若干の説明TOP

「ファイル選択と抽出」ボタンを押すと、ファイル選択ダイアログが開きます。ここで、「生のままの」Delphi製のプログラムを選択すると、使用されているフォームを抽出して、「dfm」ファイルと「pas」ファイルを捏造します。

ここでいう「生のまま」というのは、UPX (などの圧縮ツール) などを使用しておらず、Delphi で再構築したままの姿、ということです。

抽出結果は、このプログラムのある場所に、対象になった実行ファイルの名称を適当にフォルダ名につけてその中にぶちまけます。

VCLScanner の方法で取り出せるのは、dfm ファイルだけなのですが、使用されているコンポーネントの一覧は何とかファイルから調べ上げることができるので、少なくとも Delphi で読み込めるだけの宣言文だけつけた pas ファイルも同時に捏造します。

大きな問題が二つ発生しますが、気にならないと思います。こんな技術的興味のみのツールを使う機会は来ないので。

ひとつ目は、「聞いたこともないコンポーネントが大量に使用されていても関係なしに抽出する」ことです。こんなファイルを Delphi で読み込むと「無視する?」メッセージがガンガン表示されます。

唯一の救いは「全部無視」ボタンだけです。

ふたつ目は、「OnClick などのメソッドはまったく再現できないくせに、dfm ファイルはそれがあることを覚えている」ことです。Delphi での読み込んだ後、閉じるときに「そんなメソッドはないんですが削除しますか?」メッセージがこれまた大量に出されます。

唯一の救いは「いいえ」ボタンについているアクセラレータキー「N」だけです。

最後になりましたが、Delphi のバージョンがはるか先まで進んだこの世の中で、いまだに Delphi6 を使っている事実と役立たずツールに消費した無駄時間が心地よし。

抽出例TOP

まず、dfm ファイルは問題なく本物が取り出せているはずです。

object MainForm: TMainForm
  Left = 249
  Top = 144
  Width = 634
  Height = 301
  Caption = 'MainForm'
  Color = clAppWorkSpace
  DockSite = True
  Font.Charset = SHIFTJIS_CHARSET
  Font.Color = clWindowText
  Font.Height = -13
  Font.Name = #65325#65331' '#12468#12471#12483#12463
  Font.Style = []
  FormStyle = fsMDIForm
  Menu = MainMenu
  OldCreateOrder = True
  Position = poDefault
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  (以下略)

pas ファイルは使われているコンポーネントの一覧に過ぎません。

unit UnitTMAINFORM;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TMAINFORM = class(TForm)
    ImgBack: TImage;
    ImgBtnFace: TImage;
    Panel1: TPanel;
    ToolBar: TToolBar;
    ToolButton3: TToolButton;
    ToolButton2: TToolButton;
    ToolButton1: TToolButton;
    ToolButton4: TToolButton;
    Panel2: TPanel;
    (以下略)

後は、そう、保存したときのファイル名はすごく適当です。その dfm ファイルの持ち主のフォームの名前を元にそれらしくしているだけです。

おわり。

EOFTOP