Edited at

C++Builder を Delphi として使う?


はじめに

Delphi と C++Builder には Community Edition という無償版があるのですが、どちらか片方しかインストールできない (両方同時にインストールできない) という制限があります。1

Delphi だけをやりたいって人は迷わず Delphi をインストールすればいいのですが、ポトリペタリで C++ の RAD 開発ができる C++Builder も魅力的です。

さて、どっちをインストールするべきなのでしょう?


C++Builder と Delphi

VCL フレームワークも FireMonkey フレームワークも Object Pascal で書かれています。C++Builder では VCL や FireMonkey が使えます...という事は?


C++Builder で Delphi のプロジェクトを読み込ませてみる

C++Builder でプロジェクトを開こうとすると気になる選択肢があります。



Delphi プロジェクト?

え?C++Builder で Delphi のプロジェクト開けるの?試しに Delphi のプロジェクトを読み込ませてみます。



ぬか喜びじゃないですかヤダー!どうやらこれは RAD Studio の機能のようです。単体インストールされた C++Builder では使えません。


C++Builder で Delphi のユニットを読み込ませてみる

では Delphi のユニットを読み込ませてみます。Delphi で作った空のフォームです。



読み込みはしましたが〔F12〕を押してソースコードに切り替える事はできませんでした...がっかりです。


C++Builder のプロジェクトに Delphi のユニットを読み込ませてみる

さて、この辺で茶番は終わりにしましょう。結論を先に言うと、限定的ではありますが C++Builder で Object Pascal プログラミングをすることは可能です。次に具体的な方法を示します。


1.C++Builder のプロジェクトを作成する

まず、普通に C++Builder のプロジェクトを作成します。今回は VCL アプリケーションにしてみます。[ファイル | 新規作成 | Windows VCL アプリケーション - C++Builder] です。


2.C++Builder のユニットを削除する

プロジェクトマネージャにあるユニットをプロジェクトから削除します。



こんな感じになります。


3.Delphi で作ったユニットを追加する

[プロジェクト | プロジェクトに追加] であらかじめ用意しておいた Object Pascal (Delphi) ユニットを読み込ませます。


4.C++Builder プロジェクトを一旦保存する

[ファイル | プロジェクトに名前を付けて保存] でプロジェクトを一旦保存します。


5.Delphi ユニットを開く

プロジェクトマネージャで Object Pascal のユニットをダブルクリックして開き、



[ファイル | 名前を付けて保存] で C++Builder プロジェクトと同じ場所に保存しておきます。



これで、C++Builder のプロジェクトに Object Pascal (Delphi) のユニットという奇妙なプロジェクトができました。


6.フォームにコンポーネントを貼る

フォームデザイナでフォームにラベルとボタンを貼ります。


7.コードを記述する

コードを記述します。フォームデザイナでボタンをダブルクリックすると...



イベントハンドラを記述できます...Object Pascal のイベントハンドラを。

procedure TForm1.Button1Click(Sender: TObject);

begin
Label1.Caption := 'Hello,world.';
end;

イベントハンドラにはボタンを押したらラベルに Hello,world. を表示するコードを記述しました。


8.コンパイル

とりあえず何も考えずに〔F9〕を押してデバッグ実行してみます。



ボタンをクリックすると...



ちゃんと実行されましたね。

C++Builder では Object Pascal (Delphi) のユニットを混在させてコンパイルする事ができます。一つのソースコードの中でのミックスドランゲージはできないのですが、一つのプロジェクト内でのマルチランゲージは可能です。しかも C++ と Object Pascal 混在のプロジェクトであってもビルドはシームレスに行われます。

プロジェクトファイルだけ C++Builder で作って、Object Pascal (Delphi) のユニットを追加するとなんちゃって Delphi として使う事ができます。


デメリット

C++Builder を Delphi 代わりに使う事のデメリットは次の通りです。


  • コンパイルが遅い

  • Delphi プロジェクトが使えない (Delphi のコンソールアプリが書けない)

  • C++ と Object Pascal を混在させるとコードが複雑になる

  • Delphi のユニットを新規作成できない

Delphi を使いたければ素直に Delphi インストールしときなさいって事なのですが、最後の一つはどうにでもなります。Delphi で作られた空のユニットを用意しておけばいいのです。

先にやったように、空の Object Pascal (Delphi) ユニットを [プロジェクト | プロジェクトに追加] で読み込ませて [ファイル | 名前を付けて保存] で保存すれば OK です。


空の VCL Pascal ユニット

空の VCL Pascal ユニットです。フォームファイル (*.dfm) とユニットファイル (*.pas) になります。


Unit1.dfm

object Form1: TForm1

Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 299
ClientWidth = 635
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
end


Unit1.pas

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
TForm1 = class(TForm)
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

end.



空の FireMonkey Pascal ユニット

空の FireMonkey Pascal ユニットです。フォームファイル (*.fmx) とユニットファイル (*.pas) になります。[ファイル | 新規作成 | マルチデバイスアプリケーション - C++Builder] で FireMonkey プロジェクトを作成した時にはこちらのユニットが必要になります。


Unit1.fmx

object Form1: TForm1

Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 480
ClientWidth = 640
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
DesignerMasterStyle = 0
end


Unit1.pas

unit Unit1;

interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs;

type
TForm1 = class(TForm)
private
{ private 宣言 }
public
{ public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.fmx}

end.



なお RAD Studio

なお、RAD Studio をお持ちの場合は、C++Builder ではなく RAD Studio で起動して C++Builder プロジェクトを開くと、C++Builder プロジェクトに対して簡単に Object Pascal (Delphi) ユニットを追加できます。



便利ですね。


おわりに

「Delphi Community Edition をアンインストールしても C++ Community Edition をインストールできない!」ってなる方がいらっしゃるといけないので言っておきますと、Delphi Community Edition をインストールしていて C++ Community Edition に入れ替えたい場合 (またはその逆) には、アンインストールする前に [ヘルプ | ライセンスマネージャ] か、インストールフォルダ内にある LicenseManager.exe を実行し、該当するライセンスを削除してください。



なお、C++ と Object Pascal を混在させる方法は Embarcadero 公式のブログでも言及されていますのでご一読ください。

Delphi には C++ コンパイラが付属しないため、Community Edition のようにどちらか片方しかインストールできないとしたら C++Builder を選ぶべきなのでしょうね...やれる事の幅が広がりますので。

C++Builder Community Edition をインストールして最初に書くアプリケーションは Delphi (Object Pascal) ユニットジェネレータですかね :smile: