CondChart - 論理式を図で表示・編集するライブラリ

CondChartはAND,ORで連結された論理式を図で表示・編集するライブラリです。
特徴

  • 論理式を解析し、図で表示
  • 図を編集して論理式を作成

C++Builder XEで作成したソースを公開します。

詳しくはこちらをご覧下さい。

2012年10月

Win32APIの印刷プログラムで躓いた事

Win32APIを使った印刷プログラムでキャノン製の数種類のプリンタだけで印刷できないことがありました。 エラーが出ることもなく、正常に印刷できたように振る舞うのですが何も出力されません。その原因は・・・

続きはこちらをご覧下さい。

2012年4月

CsvGridEd - CSV ファイル編集ソフト(フリー)

CsvGridEd は、CSV 形式のファイルを表形式で編集するソフトウェアです。
特徴

  • シフトJIS以外の文字コードにも対応
  • タブ形式で複数のファイルを編集可能
  • 複数回の「元に戻す」「やり直す」が可能

詳しくはこちらをご覧下さい。

2011年9月

C++Builderメモ

C++BuilderからOLEでExcelを制御しファイルを読む

C++BuilderでExcel形式のファイルを読む時、Excelのファイル構造がわからなくても、 OLEを使ってExcelをコントロールしてファイルを読みデータを取り込むことができます。 また、OpenOffice Calcでも同様の処理ができます。

詳しくはこちらをご覧下さい。

2013年6月


C++BuilderからWMIを呼び出す

WindowsにはWMI(Windows Management Instrumentation)というものがあり、WMIを使うとシステム構成やログ等を取得することができます。ネットのサンプルではVBやVBSを使うものが多いのですが、C++Builderから呼び出すこともできますので、そのサンプルをいくつか紹介します。


詳しくはこちらをご覧下さい。

2011年10月

gvimを使う

プログラムは使い慣れたエディタで編集したいものです。
UNIX界隈のエディタといえばviとEmacsがあり、どちらを使うかは好みの問題かと思います。
私はvi派で、WindowsではVimのGUI対応版であるgvimを使っています。
C++Builder XEのツールに登録すると、C++Builderのエディタで編集しているファイルをgvimで開きカーソルを同じ行に置くことができるようになり使い勝手が良くなります。
gvimはKaoriyaさんから調達しました。Kaoriyaさん、ありがとうございます。
登録はC++Builder XEのメニュー「ツール」→「ツールの構成...」で開いたツールオプションのウィンドウで「追加」をクリックし開いたツールプロパティのウィンドウで次のように設定します。

タイトル:gvim
プログラム:インストールしたディレクトリ\gvim.exe
作業ディレクトリ:
実行時引数:+$ROW $EDNAME

大切なのは実行時引数です。$ROW、$EDNAMEはマクロで「カーソルの行位置」、「エディタで編集中のファイル名」になります。
gvimの引数でカーソルの行指定は「+行番号」なので、実行時引数で +$ROW とします。
C++Builder XEでは +$ROW で $ROW が行番号に置き換わりましたが、C++Builder 2007では + と $ROW が連続していると $ROW がマクロと解釈されず、そのままの文字列になってしまいます。かといって + と $ROW の間にスペースを入れるとVimがカーソルの行指定と解釈しなくなるので、どうしようもありませんん。


カーソルの変更と復帰をC++のクラスで行う

カーソルの変更と復帰を、コンストラクタで現在値を保存してから変更し、デストラクタで保存しておいた値に戻すクラスで行うと、復帰し忘れが防止できます。
C++標準ライブラリのauto_ptrみたいなものかもしれない。
具体的には次のようなクラスを定義します。

class CChangeCursor
{
private:
TCursor OldCursor;
public:
CChangeCursor(TCursor cursor)
{
OldCursor = Screen->Cursor;
Screen->Cursor = cursor;
}
~CChangeCursor()
{
Screen->Cursor = OldCursor;
}
};

使用する時は次のようにします。

func_x()
{
// 時間のかかる処理なのでカーソルを変更する
CChangeCursor change_cur(crHourGlass);

// 時間のかかる処理
.........
}