![]() |
画面●Delphi 8 以前は独立していた各ウインドウがペインとしてメイン・ウインドウに統合された。またこれまで並べて同時に表示できたGUIのデザイン画面とソースコードの編集画面を,タブで切り替えなければならなくなった。従来のDelphiからは大きく様変わりしている。 |

最大の目玉は,既存のDelphiアプリケーションのソースコードをDelphi 8でコンパイルし直すだけで,.NET Framework上で動かせるようになること。VCLを.NET対応させた効用だ。フィールドテスト版で試したところ,実際に高い互換性が保たれていた。ほとんどのソースコードは手を加えずに動作した。
UIはVisual Studioそっくり
.NET Frameworkに本格対応するにあたり,Delphiはユーザー・インタフェース(UI)を一新した。同社の「C#Builder」や,米Microsoft社の「Visual Studio .NET」に似たものになっている(画面[拡大表示])。従来からのDelphiユーザーは違和感を覚えるかもしれない。
一方,ソースコードの互換性は高い。コンポーネント群のうちごく一部しか検証していないが,その範囲では確かにほとんど手を加える必要はなかった。
まず試したのは単純なGUIアプリケーション。コンポーネント・パレットから選べる,ボタン,テキスト・ボックス,タイマーを利用するアプリケーションをDelphi 7で作成し,そのソースコードをDelphi 8に読み込ませた。一切編集を加えずにコンパイルして実行できた。
パレットにないクラスを使ったアプリケーションとして,「Printer」コンポーネントで印刷するプログラムも試してみた。これも全く編集の必要なく,Delphi 8で正常に動いた。
そこでハードルを上げて,WindowsのAPIをカプセル化したメソッドを試した。パソコンに接続されたデバイスから固有の情報を取得する「GetDeviceCaps」だ。.NET FrameworkではWin32 APIの直接呼び出しは推奨していないので,Delphi 8にこのAPIがなくても不思議ではない。だが,プリンタから解像度を取得するコードが問題なく動作した。
書き換えが必要な場面もある
ただし,コードの書き換えが必要なコンポーネントもあった。その一つが,Windowsの共通ダイアログ・ボックスを利用するものである。
Delphi 8でもコンパイルは問題なかったが,正常に実行できない。ファイルを選択するためのダイアログ・ボックスを開こうとすると,エラーが表示される。
この問題は,.NET FrameworkでCOMコンポーネントを呼び出すときの制約である。COMコンポーネントはマルチスレッド対応のものとシングル・スレッド対応のものがあり,一般的にUIを持つものはシングル・スレッドで使う。共通ダイアログ・ボックスもそうだ。これらを.NET Frameworkのランタイムが呼び出すときは,スレッドごとに一つのインスタンスを生成するよう設定する必要がある。そのための属性を自前で追加しなければならなかった。