C++Builder Tips
この手のイベントに参加するのは本当に久しぶり。楽しい時間を過ごせました。 LTのネタは諸事情により2年3ヶ月ほど塩漬け状態な、コードフォーマッタープラグインネタ。あまり役に立たない、昨日使用したプレゼンを公開します。 ちなみに、プラグインそのも…
なし崩し的にDelphi Advent Calendar 2012に記事を書く羽目になった件について。(ぉぃ まぁ、実業務でのちょっとした覚え書きな件もあるので、いい機会だし久しぶりに更新してみる。ここ数年でプログラミング環境はUnicodeを意識せざるを得なくなった。DBの…
メインマシンのセキュリティソフトをウイルスバスターからエフセキュア インターネット セキュリティ 2011に乗り換えたのだけど、RAD Studio XEを起動すると「使用許諾コードが不正」と判断されてRAD Studioが起動しなかった。 これは、エフセキュア インタ…
C++BuilderではOpen Tools APIを使ったアドオンをデバッグできない件があり、これをQC#92188として登録したのだけど、Embarcaderoから回答があって一応の解決法が見つかりました。以下の手順でアドオンのデバッグが可能。 OTAを使ったプロジェクトをC++Build…
TBalloonHint::ShowHintに問題があるみたいで、代替にJVCLのTJvBalloonHintを使うというエントリーを書いたのだけれども、Embarcaderoの高橋さんからコメントがあって、再テスト。自分の勘違いで問題が無いことが確認できたのだけれども、以下の点に注意。 T…
エディタの編集バッファ ビュー(IOTAEditView)のBufferプロパティがソースエディタ内部のバッファで、ソースファイルの中身を編集する。インターフェースはITOAEditBuffer。 ソースエディタが1つのファイルをオープンしている場合、ビューは複数あっても、…
モジュール モジュールとはIDEがアクセスする抽象的なエディタの組み合わせのことで、Delphi/C++Builderのプロジェクトにおけるユニットに相当。ユニットがソースファイル(*.pas/*.cpp)やヘッダファイル(*.h)、フォームファイル(*.dfm)の組み合わせであるよ…
かねてから、Pro版で使用可能なFirebird/Interbase用のコンポーネントを探していて、 Unified Interbaseコンポーネントをつかってみた(その1) Delphiッこ倶楽部東京出張所でUnified Interbaseコンポーネントの解説記事 という記事がポストされていたので…
QC#66768によると、TBallonHintは任意の位置にバルーンヒントを表示できないっぽい*1ので、代替としてJVCLのTJvBalloonHintを使ってみる。TJvBalloonHintはTBallonHintをJVCLが拡張したコンポーネントでは無いので、使い方が根本的に違う。あと、現時点での…
通常のポップアップヒントでは出来ない強調表示や文字の色変えをHTMLで定義して描画してみる。ただ、ポップアップヒントを表示する目的だけでIEコンポーネントやGeckoを使うのはヘビーなので、JVCLが用意してくれている簡易HTMLレンダリングルーチンを使用。…
フォーム作成時のエラー処理でちょっとハマったので、ほとんど覚え書き。アプリケーションの設定ファイルをアプリケーションと同じフォルダに置くことはよくあること*1だけど、設定ファイルが無い場合はデフォルト値で初期化するのではなく、アプリケーショ…
IDEのメニューを差し替えるには、IDEそのもののサービスであるINTAServicesのMainMenuプロパティを取得する。 これはTMainMenu型なので、通常のメニューにアクセスのと全く変わりなし。 procedure TFilterWizard.DataModuleCreate(Sender: TObject); var i: …
セキュリティ的に絶対的な効果はないけど、アプリケーションの実行中にPrintScreenキーを無効にしてスクリーンショットを撮れなくするのはそれなりの抑止力があるはず。キーストロークをWindowsに登録するホットキーはフックよりも実装が楽。元ネタは、ここ…
Mozillaのエンコーディング自動判別ライブラリである「universalchardet」をDLL化したのをC++Builderで動作させてみました。C++Builderでの修正箇所はprmem.hの「#include 」を「#include 」にするだけ。アーカイブはhttp://a7m.sakura.ne.jp/SOURCE/univers…
Boost Update 1を含むRAD Studio XE/C++Builder XE Update1がリリース。ただし、Boost Update 1にすると、boost::tupleを使っている部分でコンパイルエラーになるので以下の部分を修正。$(BDS)\include\boost_1_39\boost\tr1\detail\config.hppの48行目、"(_…
プロジェクトの作成 IDEへのアドオンは、パッケージを作成してそれをIDEに「登録」することで実装される。RAD Studioの場合、[ファイル|新規作成|パッケージ-Delphi]で新規プロジェクトを作成する。Open Tools APIのクラスやインスタンスは通常のプロジェク…
戯言前口上 RAD Studioにコードフォーマッターが実装されても、残念ながら、宗教論争にすらなるC/C++のコーディングスタイルすべてをカバーし切れていないのが不満。ということで、RAD Studioのコードエディタ上からGNU IndentやUncrustifyといった既存のコ…
LinuxやFreeBSDといったUnix系OSにSSHとSubversionがインストールされていれば、RAD Studio XEからでもSSHトンネリングを利用してリモートのSubversionのリポジトリにアクセスできる。 サーバーは以下のように設定されているものとするので、適宜読み替えて…
RAD Studio(C++BuilderとDelphiの両方)がインストールされている場合は、Delphi用のプロジェクトのプロジェクトオプションを変更することによって、C++Builderのプロジェクトでも使用可能。当然、コンパイル後のパッケージではなくソースコードが必要。 RA…
RAD Studio XEにインストールする場合は以下の点に注意。RAD Studio XEはJCL2.21 & JVCL2.40で対応。これらは、パートナーDVDに含まれている。 $(BDSCOMMONDIR)*1にフォルダ"hpp"を作成する。C++Builderが使用するJCLのヘッダファイルはここに生成される。*2…
UnicodeStringに関するちょっとした仕様変更 UnicodeString::t_char()は移行期間が過ぎたということで「非推奨」に。それに伴い、プロジェクトのTCHARのマッピングがデフォルトでwchar_tに。よって、C形式の文字列ポインタ(const wchar_t*)が欲しい場合は、c…
C++RTLの更新 まず、ディスカッションフォーラムで問題になっていた、ストリームIOについての致命的なバグはFIXされました。こんなコードを喰わせると何故か文字化け。 #include <string> #include <iostream> #include <locale> int main() { char locale[] = "japanese"; std::locale</locale></iostream></string>…
"Fulcrum"のコードネームで開発されていた、C++Builder/Delphiの新バージョンが"RAD Studio XE"として発表。 ベータテストをやっていたのだけど、表に出せる部分は出してもいいよとのお達しがEmbarcaderoから来たので、ほんの少しだけ晒してみる。 もちろん…
既に情報は出ているけど、個人的なニーズがあってまとめてみた。 1. アプリケーションがHTML Helpを表示するようにする。 適当なソースコード(WinMainがあるコードかメインフォームのコードが一番無難かも)に以下の2行を追加。#include <HtmlHelpViewer.hpp> #pragma link "HTML</htmlhelpviewer.hpp>…
前準備: Windowsが64bit版の場合は、コントロールパネルの「ODBC (32ビット)」ではなく、32bit版の"C:\Windows\SysWOW64\odbcad32.exe"を実行する。 ユーザーDSNかシステムDSNに"Microsoft Text Driver"が含まれているか確認。 接続: OLE DB プロバイダー…
C++Builderの[プロジェクト|オプション|バージョン番号]で設定したバージョン番号を取得するには、GetFileVersionInfoとVerQueryValueを使用してアプリケーションの情報を取得する。VerQueryValueで戻ってくるサイズは文字数。 UnicodeString GetApplicat…
$(BDSCOMMONDIR)\Demos\CPP\Apps\ShellControlsにある、C++Builder用のシェルコントロールコンポーネントが不安定なので、Delphi用のサンプルをインストール。 [ファイル|新規作成|パッケージ]で新規パッケージを作成する プロジェクトを保存。プロジェクト…
アクセスメソッドは多用しても、プロパティは標準C++に無いからあまり使っていなかったけど、「シンタックスシュガー」としては激しく便利。 ただ、仮想関数との兼ね合いがちょっと気になったので試してみた。 //------------------------------------------…
今回リリースした正規表現チェッカーはBoostにかなり依存しているのだけど、コアとなるboost::regexだけではなく、 boost::foreach boost::preprocessor boost::shared_ptr なんてものを使ってます。特に、boost::preprocessorはかなり協力。VCLコンポーネン…
Boostのutf8_codecvt_facetをインクルードして、imbueでストリームに設定してやればOK。 libs/detail/utf8_codecvt_facet.cppもインクルードしてやらないとリンクエラーが発生。 UnicodeStringをstd::wstringにしてもちゃんと読み書きできる。 参考URL: htt…