YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

C++ Builder

色を作る

GUIを作る上でやっぱり重要なのは色だと思う。色によってグルーピングしたり、アクセントをつけたりできる。普通は適当にWindows標準色(プロパティで変えられるボタンの色等)を使ったりすれば楽なんだけど、自分で色を作りたいときとかある。(グリッドの…

C++ Builderが入っていないマシンで実行ファイルを走らせる

なんかdllがないっす、みたいなエラーがでるんで探してみたら、どうもプロジェクトオプションの「実行時パッケージを使って構築」をはずしてやるとよいみたい。

RecordCountについて

最近またC++ Builderを使っているわけだが、そこでDBにクエリを投げて結果を取得した後に num = DataModule1->Query1->RecordCount;のような形でレコードの件数を取得しようとしたらなぜか-1がはいっているという現象にぶち当たった。これが結構厄介だったん…

クエリ中でcastをするとき

printf文でAnsiString型変数にクエリをセットするときに、クエリ中にcastがあるときは注意。PostgreSQLの慣例のcast方法、つまり somedata::integer のように::を使ってcastして、QueryをClear、Add、Openしようとするとエラーが出る。castするときはかなら…

監視式

監視式で DataModule->Query->FieldValues["name"] とやったら「式の評価が云々」といったエラーが出て監視できず。謎。と思ったらどうやらポインタ参照している物は監視できないらしい。道理で AdvStringGrid->Cells[ARow][ACol] = DataModule->Query->Fiel…

AdvStringGrid

TMS Software | VCL, FireMonkey, ASP.NET, .NET controls & components for Delphi, C++Builder & Visual Studio 市販のC++ Builder用のライブラリです。これを使って表を作成し、印刷しようとしてるんですが、なかなか難しい。とりあえず抑えておくことはO…

StringGridのDrawCellに関係して

FixedRowやFixedCellでいろいろ指定したい FixedRowとかFixedColは作成後に文字色やセル色を変更できないため、始めに変更しておきたかったらDefaultDrawingのプロパティを外しておかないといけない。 文字のalignを決めたい。 optという変数に opt = (水平…

IMEを操作する

EditBoxには数字だけを入れたいときとかがあるからIMEを操作したい。というわけでたいていのコンポーネントにあるプロパティのImeModeをいろいろと操作すればオッケイ。たぶん使うのはこれくらい。 imDontCare : 名前の通り、気にしない imClose : IMEを英数…

ComboBox

しばらく更新してなかったけど、同じ部分ではまってて書くネタがなかっただけ。でもようやくなんとか逃げられたから、その一部始終をここにメモ。 ComboBox->Items->Clear()を呼ぶとテキストとアイテムをすべて初期化してしまう というわけで必要なとき以外…

OnKeyDown

ショートカットキーを作りたい場合はOnKeyDownを設定してやればいい。Buttonとかにフォーカスを合わせる場合は Button->SetFocus(); でできるし。ただしFormのKeyPreviewの値をtrueにしておかないとOnKeyDownが呼ばれないので、そこんとこ注意。

StringGrid再描画

Refresh()というメソッドを使えばよかったらしい。JavaのSwingやアプレットと一緒なのね。というかこの考え方自体GUIだったら当たり前なのか…。とりあえずやり方がわかったからいいや。流れとしてはこんな感じね。 StringGrid->function1(); StringGrid->fun…

StringGridの選択

StringGridの選択範囲の獲得はメンバSelectionによって行う。なお、この構造体は選択範囲の各辺の位置を表すLeft,Right,Top,Bottomというint型の変数を持つ。

DBコンポーネント

DBコンポーネントを扱っていく中で便利だと思ったメソッドやメンバをいくつかリストアップ。まずはおまじない。 AnsiString str = "expression"; DataModule->Query->Clear(); DataModule->Query->Add(str); DataModule->Query->Open(); これでデータセット…

MainForm

Formを作る順番を間違えたので、MainFormが想定している物と違う物になってしまって困ってたら、GUIで簡単に設定できることがわかった。 [プロジェクト]-[オプション]-[フォーム]でMainFormを設定できる。

今日使った関数

SetFocusメソッド 任意のフォームまたはコントロールにフォーカスを設定するメソッド。 Edit1->SetFocus(); FieldValuesメソッド カレントレコードのフィールドを参照するためのプロパティ。フィールド名を指定して、カレントレコードへ値を設定したり、参照…

ログインプロンプト

DBにアクセスして動的にテーブルを作成する際に、いちいちDBアクセスのためのIDとpassを聞かれるのはうざったいので、DataModuleでDatabaseコンポーネントを配置し、プロパティを以下の様に設定するとログインプロンプトが出ない。 AliasName 名前の通り Dat…

監視

今クエリーにSQL文を送信するために、AnsiString型のsqlという変数を DataModule->Query->SQL->Add(sql) という形で投げている。これでSQL文にエラーがあるようなら、このsqlという変数を監視すればよい。監視の方法は[表示]-[デバッグ]-[監視式]でウィンド…

DataModule

DBにアクセスするためにDataModuleを追加しようと思って、適当にサンプルコードにあったDataModule.cpp/.hをコピーして自分のプロジェクトに追加してビルドしたらリンカエラーがでた。 原因を探ってみたら、コピーしたのがまずかったっぽい。自分のプロジェ…

独立ウィンドウ

フォームを独立ウィンドウにするためには、まずProject用のcppファイルの Application->Initialize(); の前に SetWindowLong(Application->Handle, GWL_EXSTYLE,GetWindowLong(Application->Handle, GWL_EXSTYLE)|WS_EX_TOOLWINDOW); を追加して、次にタスク…

文字列型

文字列型としてAnsiString型が用意されている。主にFormやButtonのCaptionやEditのTextなどとして利用されている。 代入の方法としては AnsiString str; str = "test"; の様にダブルクォーテーションでくくって文字列を表す。 また文字列の連結は+演算子やca…

新規プロジェクト

新規プロジェクトは「C++Builder プロジェクト *.bpr」で保存してからでないとビルドしても反映されないよ。