この記事は、2018年12月6日に開催されたエンバカデロ・デベロッパーキャンプ【G4】「Delphi / C++Builder / RAD Studio 新バージョンの概要」に関する解説です。

IDEのUI/UX改善

IDEは見た目が大きく変わりました。まず、IDE全体の色彩がライトスタイル、ダークスタイルが共に青色ベースとなり、人間工学的観点から長時間作業で疲れない配色に変更しました。

   

10.3 RioのIDE

   

10.2.3 TokyoのIDE

変わったのは見た目だけではありません。ダイアログ全体に対して、位置や間隔の調整や余分な枠線、境界線の削除が行われました。

   

プロジェクトオプションダイアログの比較

タブコントロールのサイズも変更しました。

   

IDEインサイト(検索機能)はタイトルバーに移動しています。

他にも、新規作成ダイアログやGetItがリスト形式になり、概要と詳細が判りやすくなりました。

新しいレイアウトの新規作成ダイアログとGetIt

言語仕様のエンハンス

Delphi

かねてから要望が多かった変数の動的宣言と型宣言が追加されました。今まではvarブロックで宣言していた変数が、任意のbegin~endブロックで宣言できるようになり、変数の有効範囲はそのブロック内のみとなります。

型推論も導入されました。varで変数を型指定なしに宣言をすると、右辺の型から推論した変数の型が用いられます。ジェネリック型や無名メソッドを使用する場合に打鍵数を減らすことが出来ます。

procedure TForm1.btnCountClick(Sender: TObject);
begin
  ListBox1.Items.Clear;

  for var I := 0 to 100 do begin
    ListBox1.Items.Add(I.ToString);
  end;
end;

C++

Windows 32-bit向けC++ Clangコンパイラは Clang / LLVM 5.0.2ベースとなり、C++17に対応しました。そしてWindows 32-bit向けの新規プロジェクトではデフォルトでC++17コンパイラが用いられるようになりました。もちろん、従来のC++コンパイラであるBCC32も引き続き使用可能です。これまでのソフトウェア資産を活用するために過去の互換性が重要な場合はBCC32を、新しいプロジェクトでC++17による新機能を使いたい場合は新しいコンパイラと、目的に応じて使い分けられます。

型推論や、範囲for文、ラムダ式といった「モダンな」機能がC++Builderにもたらされることで、ソースコードの可読性、記述性が上がり、より品質の良いコードとなるでしょう。

セッションでは、C++17で標準になったクラスの例として、std::string_viewを挙げました。C++BuilderからC++標準のライブラリに文字列を渡す場合は、一度、std::wstringに変換しますので、コピー時間などのコストがかかります。しかしstd::string_viewはポインタベースの管理ですので、メモリ領域が共有化され、パフォーマンス向上が望めます。

void __fastcall TForm2::btnCpp17Click(TObject *Sender)
{
  UnicodeString us(L"これはUnicode文字列です");

  std::wstring_view sv(us.c_str());
  for (auto& c : sv) {
  this->ListBox1->Items->Append(UnicodeString(c));
  }
}

 

VCLのエンハンス

10.3 Rioでは、高DPIに対する更なる対応がなされました。

VCLでのビットマップイメージはピクセルベースです。一方、コントロールはDPIスケールに応じて適切なサイズで描画されます。そのため、高解像度なモニタでDPIスケールを高くすると、相対的にビットマップイメージの表示サイズが小さくなってしまいます。しかし10.3 Rioより導入されたTVirtualImageListでは、DPIスケールに応じたビットマップを選択することができるようになります。その結果、ボタンのサイズに対して極端に小さいビットマップが表示されることがなくなります。また、Per Monitor V2のサポートにより、異なる画面間での DPI スケールの変更に対応することができます。

   

FireMonkeyのエンハンス

Android

Android API version 26 向け開発をサポートするようになりました。これにより、Google Play ストア向けの新規アプリ申請で必要な条件を満たします。

以下のコントロールでネイティブコントロールが使用できるようになりました。この変更により、例えば、TEditではATOKのようなサードパーティー製のキーボードの追加機能が使用可能となります。また、各コントロールには、マテリアル デザイン テーマを適用できます。

  • TCalendar
  • TEdit
  • TSwitch

このキャプチャの上側がFireMonkey、下側がAndroidのネイティブコントロールです。

FireMonkeyは各コントロールを「絵」で表現しているのですが、本バージョンより、ネイティブコントロールの「上」にコントロールを配置する事が出来るようになりました。TButtonをTWebBrowserからはみ出るように配置したので、ボタンの上部が欠けています。

  

iOS

iOSはiOS 12 サポートが含まれました。

このほかにも、多数の新機能が追加されています。これらについては、Blogなどで随時発信していきます。

 

資料ダウンロードやセッションのビデオをご視聴ください

Delphi  C++Builder / RAD Studioの新機能にご興味がある方は、ぜひ資料ダウンロードやビデオの視聴をご利用ください。また、他のセッションも新機能についての紹介がありますので、是非ともご覧下さい。


デベロッパーキャンプ資料ダウンロード
セッションのビデオを視聴する

Parents
  • HeaderFooterNavigation.cbproj をコンパイル中 (Debug, Android)
    bccaarm の "HeaderFooterNavigationPCH.h" コマンド ライン
    c:\program files (x86)\embarcadero\studio\20.0\bin\bccaarm.exe -cc1 -D _DEBUG -output-dir .\Android\Debug -isysroot
    C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidNDK-17b_20.0.32429.4364\sysroot -idirafter =\usr\include -idirafter
    =\usr\include\arm-linux-androideabi -idirafter
    C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidNDK-17b_20.0.32429.4364\sources\cxx-stl\gnu-libstdc++\4.9\include
    -idirafter
    C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidNDK-17b_20.0.32429.4364\sources\cxx-stl\gnu-libstdc++\4.9\include
    -idirafter
    C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidNDK-17b_20.0.32429.4364\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a\include
    -idirafter C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidNDK-17b_20.0.32429.4364\sources\android\native_app_glue -I
    C:\Users\shing\Desktop\c++b -I "c:\program files (x86)\embarcadero\studio\20.0\include\android\fmx" -isystem "c:\program files
    (x86)\embarcadero\studio\20.0\include" -isystem "c:\program files (x86)\embarcadero\studio\20.0\include\android\rtl" -isystem "c:\program files
    (x86)\embarcadero\studio\20.0\include\android\fmx" -isystem "c:\program files (x86)\embarcadero\studio\20.0\include\android\crtl" -isystem
    C:\Users\Public\Documents\Embarcadero\Studio\20.0\hpp\Android -debug-info-kind=standalone -fborland-extensions -fborland-auto-refcount -nobuiltininc
    -nostdsysteminc -triple thumbv7-none-linux-androideabi -emit-pch -mconstructor-aliases -masm-verbose -target-abi aapcs-linux -target-cpu cortex-a8  


    -nostdinc++ -fdeprecated-macro -fexceptions -fcxx-exceptions -munwind-tables -mstackrealign -fno-spell-checking -x c++ -std=c++11 -O0 -fmath-errno
    -tU -o .\Android\Debug\HeaderFooterNavigationPCH.pch HeaderFooterNavigationPCH.h
    [bccaarm エラー] string.h(204): 戻り値型のみ異なる関数はオーバーロードできません
    string.h(45): 前の宣言がここにあります
    [bccaarm エラー] string.h(220): 戻り値型のみ異なる関数はオーバーロードできません
    string.h(65): 前の宣言がここにあります
    [bccaarm エラー] string.h(237): 戻り値型のみ異なる関数はオーバーロードできません
    string.h(88): 前の宣言がここにあります
    [bccaarm エラー] string.h(251): 戻り値型のみ異なる関数はオーバーロードできません
    string.h(112): 前の宣言がここにあります
    [bccaarm エラー] string.h(269): 戻り値型のみ異なる関数はオーバーロードできません
    string.h(149): 前の宣言がここにあります
    失敗
    経過時間: 00:00:10.1

    上記のメッセージはマルチデバイスアプルケーションの新規作成から自動生成されたコードをターゲットをandroid変更して実行後のエラーメッセージです。コードは1行も書いていません。これはどういうことですか。

    自動生成されたコードがコンパイルできないのは不思議です。ちなみにWin32,Win64でも大丈夫です。

Comment Children
No Data