2020-01-01から1年間の記事一覧

フォームの閉じ方とModalResultの設定について

VCLでフォームを表示させ終了時にフラグで処理を変更したいときにフォームのModalResultを参照するケースがある。 ただし、ModalResultの設定については注意しなければいけない点があるのでメモ。 また、フォームの閉じ方についてもメモ。 ShowModalで表示さ…

TImageViewerなどでZoomジェスチャーの処理をする

TImageViewerなどでZoomジェスチャーの処理について探せる範囲で情報が無いのでメモ。処理は幾つかの状態保存変数とOnGestureイベントの記述で済む。 まず、TImageViewerのTouchプロパティのInteractiveGesuturesを開いてZoomをTrueにする。 OnGestureコード…

Firemonkeyジェスチャーイベント処理

この情報についてはC++ Builder 10.4.1(Sydney)で確認した情報なので、将来変わる可能性がある。 と言うか、昔と変わった部分についてEmbarcaderoがドキュメントの更新をしていないための備忘だ。まず、ジェスチャーのIDの定義だが、現時点でSystem.UITypes.…

Androidでカメラを利用するには

Firemonkeyを用いてAndoroidアプリを開発し、アプリにカメラ機能を追加するには2つの方法がある。 TCameraComponentを使って、アプリ内で撮影できるようにする。 TTakePhotoFromCameraアクションかIFMXCameraServiceを用いて、他のカメラアプリで撮影する。 …

Firemonkeyでスクロールボックスのスクロール位置を指定する

TScrollBox,TVertScrollBox,THorzScrollBoxといったTCustomScrollBoxの派生クラスをレイアウトベースとして使う場合、スクロールの位置を知りたい場合がある。 名称にScrollが付いていないのでわかりにくい(ヘルプもわかりにくい)がViewportPositionプロパテ…

Firemonkeyで次のタブストップオブジェクトを得る

VCLフレームワークであれば、以下のコードでタブで移動する先のコントロールを得ることができる。 TWinControl* pNext = FindNextControl( Edit1, true, true, false ); しかしFiremonkeyフレームワークにはFindNextControlに相当する機能はない。 いろいろ…

Firemonkeyでキーボードに重ならないように編集中のコントロールの位置を変更する(ずらす)方法

FiremonkeyでAndroidアプリケーションのテキストの入力を行うときに、仮想キーボードが出現して入力するコントロールを覆い隠す場合は、フォーム全体を上方向にずらしてコントロールを表示させたい。 Firemonkey以外で開発しているのであれば詳細は割愛する…

FiremonkeyでAndroidアプリに外部ファイルを添付する

FiremonkeyでAndroidアプリを開発するときに、アプリで使用するファイルを配置する方法についてメモ。 IDEのメニューで「プロジェクト」→「配置」をクリックして配置画面を表示させる(の配置ではない)。 上のバーの用紙に+がついたアイコンがファイルの追加…

マルチプラットフォームでZipファイル中の日時を扱う場合の注意事項

FiremonkeyでもTZipFileを使って、ZIPファイルの操作ができる。 マルチプラットフォームなので、Windows以外のプラットフォームでも利用できるのだが、日時の操作に関して注意が必要だ。Zipファイル中のファイルの日時は、TZipHeader構造体のModifiedDateTim…

double版 powについて

先日powのint版を作成して、通常のpowを用いた場合と比較した。 今回はint版と同じアルゴリズムを用いたdouble版powと通常のpowを比較してみる。 ただし乗数は整数に限るとする。 double pow( double x, int exp ); かけ算のルーチンは以下の通り double pow…

整数版powについて

C言語、あるいはC++言語において累乗を計算する場合powを使う。幾つか亜種があるが標準で用意されているのは実数版のみだ。 最も一般的なpowの定義は以下の通り double pow( double x, double expr ); 整数版は用意されていないので、累乗が欲しいときには実…

FiremonkeyとVCLで共有するコードの作成(2022-03-16更新)

このところVCLで作成した共用コードをFiremonkey(FMX)でも用いることができるように手直しをするようになった。 WindowsオンリーであればVCLを使う方が楽だ。一方3DやAndroidではFiremonkeyを使う。 ランタイムだけを使うコードであれば問題は大きくないが、…

C++ Builderのプラットフォーム定義済みマクロ

C++ Builderでプラットフォーム毎に条件コンパイルをする場合のマクロは、いつも探すのが大変なのでメモ。ドキュメントではメインヘルプ(Web版であればトピック)で"定義済みマクロ"を検索すれば見つかる。 一部を掲載。 マクロ 説明 __ANDROID__ Android環境…

Firemonkeyで静的ライブラリをリンクする方法

C++ Builderで静的ライブラリをリンクするには幾つかの方法がある。 手軽な方法として自分はいつも#pragma linkを使っていた。 1.#pragmaでリンクする方法 VCLでaaa.libをリンクしようと思ったときには、次のように記述する。 #pragma link "aaa.lib" ところ…

TStreamAdapterをIStreamに変換する

どのバージョンから変わったかもう覚えていないが、C++ BuilderでVCLベース(Delphiクラスオブジェクト)のポインターを扱う場合、場合によっては通常のC++のポインターではだめな場合がでるようになった。 例えばTXMLDocumentでノードの取り扱いがそうで、TXM…

VCLフォームを含むDLLを作る場合に必要なこと

DelphiあるいはC++ BuilderでVCLのフォームを含むDLLを作る際に必要なこととして、最初にメインフォームのハンドルを渡す必要がある。 プログラム本体側のApplicationと、DLL側のApplicationは別のインスタンスで、同期しない。 このため、DLLで何も考えず以…