operator=()をoverrideできるのか? できるかできないかであれば、できる。 しかし、しない方が良いだろう。ベースクラスのポインターを保持する関数などで派生クラスを含めたコピーをしたい場合どうなるか。 確認をした。 なお今回のお題では呼び出し側での…
namespaceで名前空間を指定すると、同じ関数名でも別の名前空間であればコンフリクト(名前の衝突)しないので、プログラム作成の上で重宝する。 例えば、テンポラリーな処理を行う上でローカルな関数を定義することがあるが、関数名を定義しているのを忘れて…
3月中は結局30日まで1通も来なかった中華系詐欺メール。 3月31日より平常運転に・・・日4~8通くらいかな、詐欺メールが来る。 それぞれIPは異なるので、別サーバーなのだが結局なんだったのだろう?
TRichEditを使って、メモ帳もどきを作る場合は、編集ボタンなどでモードを切り替えするなどすれば、任意の修飾を行える。 一方、プログラムで文字列を修飾しようとすると気をつける必要がある。 修飾を前提とした場合やってはいけないこと TRichEdit::Text、…
この4日にPILOTから顔料インクの強色(TSUWAIRO)が発売された。 知っている範囲ではPILOTの万年筆用顔料インクは初めてのはず。 国内大手3社(PILOT,SAILOR,プラチナ)の中では最後発となる。 同時にクリーニングキットも発売、こちらも最後発。現在、自分がメ…
大体1日に数通来ていた中華系詐欺メール。 メールソースのDate:を見れば+8:00となっていて、IPアドレスを確認しなくともほぼ確実に中国発のメールだと判る。 これが今月に入ってから1通も来ないので気持ちが悪い。 逆に-3:00とか-8:00,-9:00と言ったアメリカ…
TViewport3Dの画像をコピーしたり印刷したい場合はどうするか。 その方法と注意点について示す。 まず、今回のコードはAndroidでは動かない(プリンターサービスとかがない)コードが含まれるので注意。 画像をコピー TViewport3Dの画像をクリップボードにコピ…
久しぶりにWindows規定のフォルダーを調べる必要があって、CSIDLの何だっけと調べてみた。MicrosoftのCSIDLに関するページをみると、最初に以下のように書かれている。 注意 Vista Windows、これらの値は KNOWNFOLDERID 値に置き換えられています。 新しい定…
enumで定義されたデータをシリアライズするときは、何らかの数値(あるいは文字列)と相互変換する。 相手がintでC言語であれば、単純にキャストで相互変換もできる。C++であればstatic_castを使うこともあるだろう。 enum en { e1, e2, e3 }; en e = e3; int …
複数のオブジェクトクラスに対して、同じ動作をさせるクラスの設計をすることがある。 例えば、ファイルへのIO処理はいろいろなオブジェクトを文字列かバイナリに相互変換させるクラスあるいは関数を設計する。 毎度個別に記述するのも良いが、もう少し簡便…
Windows上でベクター画像を取り扱うプログラムを作成する場合、サイズを変更しても劣化のないメタファイル・拡張メタファイル形式は一定のメリットがある。 特にクリップボード経由の場合は便利なことが多い。 一方、メタファイルを用いる場合、ビットマップ…
タイトルの通り、C++Builderで出力されるmap中のアドレスは相対アドレスになる。 このため、実行時のアクセス違反メッセージで表示されるアドレス値とは異なることに注意。ベースアドレスは最初に記述されている。例えば以下の通り。 Start Length Name Clas…
C++ Builderもリンク時にmapファイルを出力できる。 release版でアドレス違反が発生したときのメッセージをもとに、mapファイルで発生元の関数を推測できる。ただし、そのためには準備がいる。 mapの出力設定はオプションのリンカ→出力→マップファイルの種類…
VCLでフォームを表示させ終了時にフラグで処理を変更したいときにフォームのModalResultを参照するケースがある。 ただし、ModalResultの設定については注意しなければいけない点があるのでメモ。 また、フォームの閉じ方についてもメモ。 ShowModalで表示さ…
TImageViewerなどでZoomジェスチャーの処理について探せる範囲で情報が無いのでメモ。処理は幾つかの状態保存変数とOnGestureイベントの記述で済む。 まず、TImageViewerのTouchプロパティのInteractiveGesuturesを開いてZoomをTrueにする。 OnGestureコード…
この情報についてはC++ Builder 10.4.1(Sydney)で確認した情報なので、将来変わる可能性がある。 と言うか、昔と変わった部分についてEmbarcaderoがドキュメントの更新をしていないための備忘だ。まず、ジェスチャーのIDの定義だが、現時点でSystem.UITypes.…
Firemonkeyを用いてAndoroidアプリを開発し、アプリにカメラ機能を追加するには2つの方法がある。 TCameraComponentを使って、アプリ内で撮影できるようにする。 TTakePhotoFromCameraアクションかIFMXCameraServiceを用いて、他のカメラアプリで撮影する。 …
TScrollBox,TVertScrollBox,THorzScrollBoxといったTCustomScrollBoxの派生クラスをレイアウトベースとして使う場合、スクロールの位置を知りたい場合がある。 名称にScrollが付いていないのでわかりにくい(ヘルプもわかりにくい)がViewportPositionプロパテ…
VCLフレームワークであれば、以下のコードでタブで移動する先のコントロールを得ることができる。 TWinControl* pNext = FindNextControl( Edit1, true, true, false ); しかしFiremonkeyフレームワークにはFindNextControlに相当する機能はない。 いろいろ…
FiremonkeyでAndroidアプリケーションのテキストの入力を行うときに、仮想キーボードが出現して入力するコントロールを覆い隠す場合は、フォーム全体を上方向にずらしてコントロールを表示させたい。 Firemonkey以外で開発しているのであれば詳細は割愛する…
FiremonkeyでAndroidアプリを開発するときに、アプリで使用するファイルを配置する方法についてメモ。 IDEのメニューで「プロジェクト」→「配置」をクリックして配置画面を表示させる(の配置ではない)。 上のバーの用紙に+がついたアイコンがファイルの追加…
FiremonkeyでもTZipFileを使って、ZIPファイルの操作ができる。 マルチプラットフォームなので、Windows以外のプラットフォームでも利用できるのだが、日時の操作に関して注意が必要だ。Zipファイル中のファイルの日時は、TZipHeader構造体のModifiedDateTim…
先日powのint版を作成して、通常のpowを用いた場合と比較した。 今回はint版と同じアルゴリズムを用いたdouble版powと通常のpowを比較してみる。 ただし乗数は整数に限るとする。 double pow( double x, int exp ); かけ算のルーチンは以下の通り double pow…
C言語、あるいはC++言語において累乗を計算する場合powを使う。幾つか亜種があるが標準で用意されているのは実数版のみだ。 最も一般的なpowの定義は以下の通り double pow( double x, double expr ); 整数版は用意されていないので、累乗が欲しいときには実…
このところVCLで作成した共用コードをFiremonkey(FMX)でも用いることができるように手直しをするようになった。 WindowsオンリーであればVCLを使う方が楽だ。一方3DやAndroidではFiremonkeyを使う。 ランタイムだけを使うコードであれば問題は大きくないが、…
C++ Builderでプラットフォーム毎に条件コンパイルをする場合のマクロは、いつも探すのが大変なのでメモ。ドキュメントではメインヘルプ(Web版であればトピック)で"定義済みマクロ"を検索すれば見つかる。 一部を掲載。 マクロ 説明 __ANDROID__ Android環境…
C++ Builderで静的ライブラリをリンクするには幾つかの方法がある。 手軽な方法として自分はいつも#pragma linkを使っていた。 1.#pragmaでリンクする方法 VCLでaaa.libをリンクしようと思ったときには、次のように記述する。 #pragma link "aaa.lib" ところ…
どのバージョンから変わったかもう覚えていないが、C++ BuilderでVCLベース(Delphiクラスオブジェクト)のポインターを扱う場合、場合によっては通常のC++のポインターではだめな場合がでるようになった。 例えばTXMLDocumentでノードの取り扱いがそうで、TXM…
DelphiあるいはC++ BuilderでVCLのフォームを含むDLLを作る際に必要なこととして、最初にメインフォームのハンドルを渡す必要がある。 プログラム本体側のApplicationと、DLL側のApplicationは別のインスタンスで、同期しない。 このため、DLLで何も考えず以…
確認したのはC++ Builder 10.xのTokyoとRioだけなのでCLang一般ではないと思う。 しかし、インプリメントを確認しないで実装するとセキュリティホールになると思われる。STLのrandomライブラリーはCベースのrandの代わりになる乱数ライブラリだ。 実用的な乱…