2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

はじめに

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

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

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

C++Builder と Delphi

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

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

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

え?C++Builder で Delphi のプロジェクト開けるの?試しに Delphi のプロジェクトを読み込ませてみます。
image.png
ぬか喜びじゃないですかヤダー!どうやらこれは RAD Studio の機能のようです。単体インストールされた C++Builder では使えません。

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

では Delphi のユニットを読み込ませてみます。Delphi で作った空のフォームです。
image.png
読み込みはしましたが〔F12〕を押してソースコードに切り替える事はできませんでした...がっかりです。

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

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

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

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

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

プロジェクトマネージャにあるユニットをプロジェクトから削除します。
image.png
こんな感じになります。
image.png

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

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

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

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

5.Delphi ユニットを開く

プロジェクトマネージャで Object Pascal のユニットをダブルクリックして開き、
image.png
[ファイル | 名前を付けて保存] で C++Builder プロジェクトと同じ場所に保存しておきます。
image.png
これで、C++Builder のプロジェクトに Object Pascal (Delphi) のユニットという奇妙なプロジェクトができました。
image.png

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

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

7.コードを記述する

コードを記述します。フォームデザイナでボタンをダブルクリックすると...
image.png
イベントハンドラを記述できます...Object Pascal のイベントハンドラを。

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := 'Hello,world.';
end;

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

8.コンパイル

とりあえず何も考えずに〔F9〕を押してデバッグ実行してみます。
image.png
ボタンをクリックすると...
image.png
ちゃんと実行されましたね。

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

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

デメリット

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

  • コンパイルが遅い
  • Delphi プロジェクトが使えない (Delphi コードでのコンソールアプリが書きにくい)
  • コンパイラが 1 対 1 で存在するとは限らない 2
  • 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) ユニットを追加できます。
image.png
便利ですね。

おわりに

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

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

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


  1. Community Edition Q&A (Embarcadero) 

  2. Wikipedia 等で対応するコンパイラを確認してください。 

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
2
Help us understand the problem. What are the problem?