Delphiのフォームファイルの拡張子は *.dfm ですが、同じ拡張子でも4つの種類のフォームがあります。
| 種類 | Delphiのバージョン | 説明 |
| バイナリ形式DFM(1) | Delphi5 以前 | Delphi4迄はバイナリ形式DFMしか使えない。 |
| バイナリ形式DFM(2) | Delphi6 以降 | Delphi6以降のバイナリ形式DFM。後述の "テキスト形式DFM(2)" をバイナリ形式にしたもの。 |
| テキスト形式DFM(1) | Delphi5 | Ansi形式のテキストDFM。0x80以降の文字はコードページに依存する。 |
| テキスト形式DFM(2) | Delphi6 以降 | Ansi形式のテキストDFM。0x80以降の文字は10進表記のコントロール文字列でエンコードされる。エンコード形式はUnicode-LE。 |
バイナリ形式DFMは Delphi4 以降でも利用する事ができますが、新規プロジェクトを作成した時のフォームファイルのデフォルトはテキスト形式となります。
| Delphiのバージョン | デフォルトの形式 | 保存形式 | IDEでの表示形式 |
| Delphi4 以前 | バイナリ形式DFM(1) | バイナリ形式DFM(1) | テキスト形式DFM(1) |
| Delphi5 | テキスト形式DFM(1) | テキスト形式DFM(1) / バイナリ形式DFM(1) | テキスト形式DFM(1) |
| Delphi6/7 | テキスト形式DFM(2) | テキスト形式DFM(2) / バイナリ形式DFM(2) | テキスト形式DFM(1) |
| Delphi2005 以降 (ガリレオIDE) |
テキスト形式DFM(2) | テキスト形式DFM(2) / バイナリ形式DFM(2) | テキスト形式DFM(2) |
非常にややこしいのですが、このようになっています。詳しくは後程、説明します。
"Delphiのインストールフォルダ\bin" にある "convert.exe" を利用し、フォームファイルをバイナリ/テキストDFMに相互変換する事ができます。
以下のコマンドはすべてのDFMファイルをテキスト形式に変換します。
|
以下のコマンドはすべてのDFMファイルをバイナリ形式に変換します。
|
フォームに0x80以降の文字を使用している場合、"テキスト形式DFM(2)" のDFMを Delphi5 で読み込む事はできません...つまり、Delphi6以降 で作られたテキスト形式のDFMは Delphi5で 読み込めない事になります。また、Delphi6以降 で作られた バイナリ形式のDFMは Delphi5 以前で読み込む事ができません。
バイナリ形式だろうが、テキスト形式であろうが、フォームに0x80以降の文字が使われていれば、Delphi6 とそれ以前では互換性がないという事です。例えば、Delphi5 で作ったプロジェクトを Delphi6以降 で保存してしまった場合、再度 Delphi5 で開くことはできなくなります。
Delphi6 限定の対応策として、レジストリエントリを変更する方法があります。
|
このように変更する事で、DFMの形式を Delphi5 互換にします...が、問題を先送りにするだけで、Delphi7 以降の互換性の問題は残ったままです。
Delphi6 以降のDFMを Delphi5 以前で使えるようにするには、以下のようにします。
Delphi6/7 では、"テキスト形式DFM(2)" が採用されていますが、IDEから "エディタで表示" した場合には、コントロール文字列が通常の文字列に変換されます(但し、コードページ依存)。そのまま日本語等を入力しても、保存されたDFMファイルをテキストエディタで開いてみると、ちゃんとコントロール文字列でエンコードされて保存されます。
しかしながら、ガリレオIDEでは コードエディタが UTF-8 に対応しているにも関わらず、フォームファイル中の 0x80 以降の文字はコントロール文字列のまま表示されます。なおかつ、日本語等を入力するとフォームに戻そうとした時にエラーになってしまいます。日本語を含むキャプション文字列等を一括で置換したい場合には、
と、かなり面倒な手順を踏む必要があります。
そこで、(毎度毎度の手前味噌ですが) "DFMコンバータ エキスパート" を使います。 "DFMコンバータ エキスパート" はIDE機能拡張型のアプリケーションで、フォームファイル中のコントロール文字列をデコードして "テキスト形式DFM(1)" にし、そのまま日本語等で編集する事が可能になります。 編集後は、逆にフォームファイル中の 0x80 以降の文字をコントロール文字列にエンコードし、"テキスト形式DFM(2)" にする事ができます。
Kylix では、"テキスト形式DFM(2)" と同様の "テキスト形式XFM" が採用されています。でも、*.pas が EUC-JP という...orz
| BACK |