C++Builder Tips

1ドット間隔の点線を描画するペンを作成する

TPenのStyleプロパティにpsDotを設定しても1ドット間隔の点線を描画してくれない。この場合はExtCreatePen APIでジオメトリックペンを作成し、それをTPenに結びつける。 LOGBRUSH logBrush; logBrush.lbColor = RGB(0x00, 0x00, 0x00); logBrush.lbHatch = 0…

C++Builderのライブテンプレート

ライブテンプレートが手軽で、かつ、かなり便利なのでライブテンプレートの作り方とC++Builder2009のライブテンプレートを使うを参考に作ってみた。作ったのは、アクセサの自動生成。アクセサとプロパティの宣言部分(accessor_decl.xml) <codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates" version="1.0.0"> </codetemplate>

C++Builder/Delphiの色設定をUniSynEditに反映させる

UniSynEditのTSynCppSynは、C++BuilderのIDEの色設定をレジストリから取得して、その設定をUniSynEditに反映できる。ただ、残念ながらBDS2006以降に対応していないので、BDS2006以降に対応したつもり。 修正したソースは、http://a7m.sakura.ne.jp/SOURCE/Un…

C++BuilderでMSXML6を使用する

C++Builder標準のTXMLDocumentはXPathが使えないなど微妙に使いづらいので、MSXMLのタイプライブラリをインポートして使ってみる。まず、以下の手順でMSXMLのタイプライブラリをインポートする。 [コンポーネント|コンポーネントのインポート]を選択 "VCL f…

覚え書き:TStreamReaderとTStreamWriterの使い方

TStreamReaderとTStreamWriterが便利そうなので試してみた。まずは、ファイルの読み込みを行うTStreamReader。 //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { i…

UniSynEditをC++Builder/Delphi 2010へインストールする方法

Unicodeが扱える高機能なエディターコンポーネント、unisyneditがC++Builder/Delphi 2010に対応したので、その覚え書き。 残念ながら、日本語環境ではそのままインストールできないので以下の手順を踏む必要がある。 アーカイブを公式から落として、アーカイ…

VCLからExcelにアクセス(C++Builder版)

第9回デベロッパーキャンプ セッションA2でネタになった、VCLを使ってExcelにアクセスするサンプルのC++Builder版を作ってみた。 オリジナルと違うのは読み込み元のデータベースをdbExpressでBlackfish SQLに接続したこと。 それに伴って、ソースコードに一…

第14回エンバカデロ・デベロッパーキャンプセッションT3自己フォロー(Delphi/C++Builder DB総ざらい)

C++Builder/Delphi 2010のdbExpressでInterbaseのドライバーを使ってFirebirdに接続するとエラー。 Pathは通しているけど、エラーメッセージに"Incompatible version"ってあるから、ドライバーがFbclient.dllをリネームしたgds32.dllかどうかチェックしてい…

第14回エンバカデロ・デベロッパーキャンプセッションT7自己フォロー(グリッドの特定列をボタンにする)

やることは、グリッドのセルにボタンを表示してそれに応じたダイアログ等を表示すること。コンポーネントを作らずにオーナードローでごまかす。 1.初期化 まずフォームにTDrawGridとTButtonを貼り付ける。TDBGridならばオーナードローにする 行数分だけ動的…

Windows 7 (x64)でC++Builder/Delphi 2009のデバッガが動作しない場合の対処法

MSDNとかでWindows 7のRTM版を入手して、早速乗り換えた人も多いと思うけど、残念ながらC++Builder/Delphi 2009のデバッガで以下のようなエラーが発生。 現状での対処方法はバイナリエディタでパッチを当てるしかない。あくまでも自己責任なので、そこのとこ…

C++Builder 2010情報解禁

ちょっと出遅れたけど、C++Builderの新バージョン、"C++Builder 2010"についての情報が解禁になったので、個人的な感想とかを晒してみる。 詳しい情報は、本家とかDelphi系ブロガーの皆様に任せるとして(ぉぃ)、いち、C++Builderユーザー視点から。 現時点…

覚え書き:C++Builder 2009以降でコンポーネントをビルドする場合についての確認事項

C++Builder 6用のプロジェクトをコンバートして、[Delphiコンパイラ|コンパイル|構文オプション|コンパイラに渡す追加スイッチ]に-LUDesignIDEを追加するときは、Baseだけでなく、デバッグ、リリース全てに追加する。*1 Delphiのソースでコンパイルエラ…

TFormの境界線を消した場合(BorderStyle=bsNone)の移動とリサイズ

以下の設定をすれば、TFormを移動したり、サイズの変更が可能。ただし、Vistaだと境界線が残る。 class TForm1 : public TForm { __published: // IDE 管理のコンポーネント private: // ユーザー宣言 public: // ユーザー宣言 __fastcall TForm1(TComponent…

TRichEditで書式が部分的に変更できない場合の対処法

TRichEditの書式設定がうまくいかない場合、フォームの生成時にRichEditのデュアルフォントモードを無効にしたほうがうまくいくっぽい。 void __fastcall TForm1::FormCreate(TObject *Sender) { // デュアルフォントモードを無効にする DWORD dwLangOptions…

UnicodeStringとboost::formatとの連係

UnicodeStringでこんなこと出来るんだ。 //--------------------------------------------------------------------------- #include <iostream> #include <vcl.h> #pragma hdrstop #include <tchar.h> //---------------------------------------------------------------------------</tchar.h></vcl.h></iostream>…

C++Builder 2009でboost 1.37.0をビルドする方法

RAD Studio Command Promptを開いて、以下を実行。今月末リリース予定の1.38も同じ方法で大丈夫なはず。 bjam --prefix=C:\lib\boost\ --toolset=borland-6.1.0 link=static,shared runtime-link=static,shared release debug install "--prefix"はインスト…

第11回 エンバカデロ・デベロッパーキャンプB5セッション自己フォロー(その2:TurboPower編)

以下の手順でTurboPowerコンポーネントはC++Builder 2009にインストール出来る。(LockBoxとOnGuardは成功)他のコンポーネントも大丈夫かも。 オリジナルのアーカイブを本家からダウンロード。 Delphi 2009用アーカイブをダウンロード。 オリジナルのアーカ…

Xerces3.0.0をC++Builder 2009でビルドする方法

Xerces3.0.0が動くらしいので、試してみた。手順は以下の通り。 インストール先のprojects\Win32\BCB6\MakeBuildDirs.batを実行。 インストール先のprojects\Win32\BCB6\Xerces-allにある、XercesLib.bprをC++Builder2009で読み込む。 プロジェクトを変換し…

Singletonパターンとマルチスレッド

マルチスレッドを考慮してSingletonを実装するとき、アクセスする度にTCriticalSectionを使ってオブジェクトの中身を保護してやらないといけないのかな・・・。 class CSingleton { private: CSingleton(){} CSingleton(const CSingleton& obj) {} virtual ~…

C++Builder 2009用ユニット参照関係修復スクリプト

フォームを使用していないユニット*1をコードエディタで表示すると、コードエディタ下側のタブに「コード」と「履歴」しか表示されない場合があるので、それを解消するRubyスクリプト。 require "rexml/document" doc = REXML::Document.new($<) doc.element…

C++Builder2009の新機能 その5 (std::unique_ptr編)

CodeGearの高橋さんから、C++0xのunique_ptrが使えるということで試してみた。今までのauto_ptrだとこんな感じ。 #include <memory> // 中略 void __fastcall TForm1::Button1Click(TObject *Sender) { std::auto_ptr<TStringBuilder> pBuffer(new TStringBuilder()); pBuffer->Appen</tstringbuilder></memory>…

C++Builder2009の新機能 その4(TStringBuilder&boostのスマートポインタ編)

VCLに追加されたTStringBuilderを試してみたけど、Appendメソッドに文字列リテラルを渡すと微妙にやばいかも。 void __fastcall TForm1::Button1Click(TObject *Sender) { boost::scoped_ptr<TStringBuilder> pBuffer(new TStringBuilder()); pBuffer->Append("123"); // TSt</tstringbuilder>…

C++Builder2009の新機能 その3(プロジェクト移行編)

その1: C++Builder 5/6/2006/2007から、C++Builder 2009へプロジェクトを移行する場合、一発でうまくいかなかったら、 ぶっちゃけ、プロジェクトを再作成したほうが手っ取り早い*1です。 もちろん、CodeGearを腐すつもりは毛頭無く、以下の理由によるもの。…

C++Builder2009の新機能 その2

Unicode対応のテストとして、いくつかのテキストファイルをTMemoに喰わせてみる。まずは、こんなテキストファイル*1から。普通に保存するとShift-JISのはず。 ユーザー総員 傾注! 諸君 C++Builder2009が来た 無敵のBCB厨諸君 最古参のBCB厨諸君 万願成就の…

C++Builder2009の新機能 その1

Delphi系の方々は解説を始めているけど、C++Builder系で解説している人が今のところいないので、解説になっているかどうか判らないけど、一発目。 まずは、目玉であるUnicode文字列の説明から。 「吉野家」の「吉」は所謂「土吉」(コード:U+20BB7)でサロ…

JCL/JVCLのヘルプをRAD Studio/C++Builder/Delphi 2007に統合する方法。

参考にしたのは、サードパーティ製ヘルプを RAD Studio ヘルプにプラグインする方法と、Integrate Help in Delphi 2007 JCL/JVCLのHTMLHelp2版ヘルプを入手。 ヘルプファイルはSourceForge.netよりダウンロード。 JCLはダウンロードエリアのJCL-1.101.1.2725…

任意解像度のビットマップにミリ単位で描画する方法

ビットマップファイルを動的に生成する場合、解像度情報はデフォルトの96dpiで生成される。 デバイスに依存しないで、任意解像度のビットマップにMM_HIMETRIC(1/100mm)単位で描画する場合、以下の手順で、ビューポート範囲等を設定する。 void SaveImage(HDC…

Borland製のコマンドラインツールとの格闘記

VC++用に書かれたMakefileをC++Builderへ移植をしたら、しばらく書いていないせいか、書き方を忘れていた。orz で、コンパイルはBCC32を使うから、C++Builder付属のmakeに食わせたら、ファイル名のワイルドカードの展開をしない。 それに、tlib(ライブラリ…

VariantからAnsiStringへの暗黙的キャストのバグ(?)

BDS2006でビルド出来ていた古いコードを引っ張り出して、C++Builder2007に食わせたら、こんなメッセージ。('A`) [BCC32 エラー] OutputLog.cpp(155): E2031 'Variant' から 'AnsiString' へのキャストはできない QCを調べたら、こんなものが。 AnsiString st…

C++BuilderとDelphiの違いに関する小ネタ×2

その1: TurboPowerのパッケージをC++Builder2007でビルドしたら、constブロックで定義している変数に値を代入していてエラーになる。('A`) ソースコードを追いかけると、どうも、C/C++でいうstatic変数っぽい使い方をしている模様。 Delphiは「静的変数」な…