今日の C++Builder 日記

bitbucket-api-demo プロジェクトのために TListView とLiveBinding の使い方を研究。VCL のリストビューとはかなり違ったので効果的な使い方を検討する。また Pascal で新しいインターフェースを追加するなど。

IDE の異常終了の原因を調査した結果 Mercurial コマンド サーバーの挙動変化により 例外処理による自動変数のデストラクションに関わるコンパイラーの問題が発覚。とりあえず 自動変数のデストラクターに依存しない方向で対応策を考えてみる。

RAD Studio のパッケージ プロジェクトを Jenkins でビルドしてみた

RAD Studio のパッケージ プロジェクトを Jenkins を使ってバージョン別にバッチ ビルドするようにしてみたので記載する。

Jenkins スレーブ ノードの設定

RAD Studio を使ってビルドを実行するために、まず RAD Studio をインストールした PC を Jenkins のスレーブ ノードとして設定する。パッケージ プロジェクトを RAD Studio のバージョンごとにビルドを実行するために、ここで RAD Studio の各バージョンを識別するラベルを列挙しておく。

jenkins-slave-1

今回はビルド実行時に手動でスレーブを起動するので、起動方法を JNLP 経由とし、また可用性も必要時だけオンラインにする設定とする。(注: Windows のサービスとして登録しておけば常時オンラインにすることもできるのだが、RAD Studio のライセンス上「指名ユーザー」だけが使用しなければならないことになっているので、手動で起動することにした。)

さらに Jenkins プロジェクトでスレーブ ノードの環境を設定するために、環境変数 BDS と BDSCOMMONDIR のバージョンごとの値を設定しておく。(注: BDSINCLUDE は BDS の値から設定可能なので省略した。)

jenkins-slave-2

Jenkins マルチ構成プロジェクトの設定

パッケージ プロジェクトを RAD Studio のバージョンごとにビルドを実行するために、Jenkins でマルチ構成プロジェクトを設定する。マトリックスの設定でスレーブを軸に追加して、ビルドしたいラベルを選択しておく。

jenkins-job-1

さらに RAD Studio のバージョンごとに設定を切り替えるために、EnvInject プラグインを利用して必要な環境変数を設定する。

jenkins-job-2

ビルド実行には MSBuild プラグインを利用して、プロジェクト ファイルからビルドするように設定する。

jenkins-job-3

ビルドの実行

必要な設定が完了すれば、スレーブ エージェントを JNLP 経由で起動してマルチ構成プロジェクトのビルド実行を選択すれば、RAD Studio ごとにビルドが実行される。追加で成果物の保存を設定しておけば、ビルド後のバイナリー ファイルを簡単に取得することができる。

C++Builder で TCustomOrientationSensor を使ってみる

ここ最近、筆者は C++Builder XE5 を使って iOS アプリケーションを作成しているところですが、TCustomOrientationSensor を使ってみたところ、プロパティ HeadingX/Y/Z で磁気センサーの計測値を取得できるようだということがわかりました。

まずフォームに FMX.Sensors.TOrientationSensor を配置した上で、イベント OnSensorChoosing に対して TCustomOrientationSensor のプロパティ SensorTypeTOrientationSensorType::Compass3D であるセンサーを選択して、プロパティ Sensor を参照します。(参考までに筆者の iPhone 5s では 2 つの TCustomOrientationSensor オブジェクトが検出され、SensorType が Compass3D でないほうは Inclinometer3D でした。)

残念ながら FMX から磁気センサーのキャリブレーションを要求する機能がないようで、あまり実用にはなりそうにありませんが、条件付きながら磁場を計測する一つの手段にはなりそうです。

> Bitbucket リポジトリー コミット

[注記: 『外来語 (カタカナ) 表記ガイドライン』に倣って、repository の日本語表記を「リポジトリー」に変更しました。]

AppWave Store ひっそりと閉鎖

無料 Windows アプリを個別にインストールしなくても使えることが売りだった AppWave Store が ひっそりと幕を閉じた模様です。結局のところ、Windows 8 以降向けのアプリは Microsoft の Windows ストアに一元化されていたので、旧来のデスクトップアプリの配信だけでは事業継続不可能との判断が下ったという推測は容易でしょう。

今回のサービス終了がニュース サイト等で全く取り上げられていないことからして、公式の発表もなかったものと推測され、ニュース バリューはないと見られているのでしょうね。

pathedit リポジトリー変更の補足解説 (2)

新規変更の分を解説。

Commite 558c8a
キャプション設定を UnicodeString に変更。_D マクロの使い方がこれで正しいのか不明だが、_D(PACKAGE_NAME) とするとエラーになるのでやむを得ない。
Commit 43d835a
リンク除外パッケージの自動追加。Microsoft Office 関係は使わないので そのままにしておく。
Commit f0516e0
動的 RTL と動的パッケージへのリンクを無効化。動的リンクにしておくと配布時に追加ファイルが必要になって無駄にサイズが大きくなるので、小規模のプログラムでは無効にしておくのが良いと思う。
Commit c23e5a3
Application->Title を実行時に設定 (仮)。プロジェクトオプションでも設定できるようなことが書いてあったが、項目を発見できず。

続きを読む →

pathedit リポジトリー変更の補足解説

自作 pathedit リポジトリーの変更について補足を書いてみることにした。

Commit 54070be
フォーム名がデフォルトの Form1 だったので MainForm に変更。
Commit 9f55c03
TStyleBook を追加。
Commit 05c048c
TActionList と TFileExit を追加。
Commit 3e13f46
外部パッケージ名を pathedit から Path Editor に変更。

[注記: 『外来語 (カタカナ) 表記ガイドライン』に倣って、repository の日本語表記を「リポジトリー」に変更しました。]

C++Builder & VCL でリストビューにソート順アイコン表示

C++Builder の VCL アプリケーションで、ソート可能なリストビューのヘッダーにソート対象カラムとソート順を示すアイコンを表示させる方法を調べたのでまとめてみる。

問題は、VCL にリストビュー内のヘッダーコントロールを取得する手段がないというところで、仕方ないので Win32 API から以下を利用する。

  • ListView_GetHeader() – ヘッダーコントロールのハンドル取得
  • Header_GetItemCount() – アイテム数取得
  • Header_GetItem() と Header_SetItem() – アイテム情報の取得と変更

使ったところは次のような感じ。

https://bitbucket.org/kazssym/dmolist/src/8038d1e15d6f400d3f4fdb049355c84ddda9a462/src/Main.cpp?at=default#cl-127