C++Builder入門:変数1

第一章:基礎知識

3.変数1

3.1.変数の宣言

前々回、計算のやり方を学習しました。しかし、あのままでは計算する値があらかじめ決まった数字でしか計算できませんでした。さらに、計算した結果に対してさらに計算したい場合などにも対応できませんでした。そこで、変数という物を利用します。

    int suuji1;
    int sample1,sample2;
    int suuji2=0;

上記の様に宣言します。 型名 スペース 名前 という形式で記述しなければ使えません。
1行目のint suuji1;は、ただ宣言しただけで、これから使いますという意味です。
2行目はsample1とsample2というint型の変数を利用しますという意味です。カンマで区切ることで複数まとめて宣言できます。
3行目は宣言と同時に変数を初期化します。変数は宣言しただけでは格納されている値が不定なので、初期値を与える必要がある場合はこのようにやるか、後で初期値を渡してやる必要があります。

3.2.変数の種類

変数の型には種類があり、C++Builderでは主に以下の物がよく利用されます。
char -キャラクター型
short -ショート型
int -インテジャー型(integer)
float -フロート型
double -ダブル型
String -ストリング型

unsigned char
unsigned int

char型は単一の半角文字を格納することが出来ます。
short型は-32,768~32,767の範囲の整数を扱うことが出来ます。
int型は-2,147,483,648~2,147,483,647の範囲の整数を扱うことが出来ます。
float型は精度の低い小数を扱うことが出来ます。
double型は精度の高い小数を扱うことが出来ます。
String型は文字列を格納出来ます。

unsigned char型は、0~255の整数を格納します。
unsigned int型は、0~4294967295の整数を格納します。
unsignedを付けることで、マイナスに割り当てられていた物をすべてプラスとして扱うことで、範囲の広い整数を扱うことが出来るようになります。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    char a;
    short b;
    int c;
    float d;
    double f;
    String moji;

    a='A';
    b=100+1;
    c=100-100;
    d=100.01-0.1;
    f=100.01/0.0005;
    moji="文字列";
}

変数の名前は好きなように設定できます。しかし、変数の頭に数字や以下の記号をセットすることは出来ません。
+-*/=%\^~@!<>;:&$#`?,.”‘|()[]{}
唯一_アンダーバーは利用できます。
int _a;

char型は、単一の半角文字を格納することが出来ます。格納したい文字は、”シングルクォーテーションで囲む必要があります。
shortとintは、ともに整数を扱う変数で、その有効範囲が違うだけです。一般的にはintの方がよく使われています。
floatとdoubleは、ともに少数を扱う変数で、有効範囲が違うだけです。どのくらいの精度が必要かは用途によりますが、細かいところまでしっかり計算したい場合はdoubleの方が使われます。
String型は文字列を格納します。格納する文字列を”"ダブルクォテーションで囲む必要があります。

3.3.変数を利用した計算

    int a,b,c;
    a=10;
    b=2;
    c=a*b;
    a=a+c;
Caption=a;

変数a,b,cを宣言し、aに10、bに2を代入します。cにaとbを掛けた物を代入しcが20になります。そして、aにaとcを足した物を代入します。aは30になります。a=a+cという数学上あり得ない計算式が出ましたが、プログラミングではa=というのは、ただ、aに=の右の値を代入するという意味しかありませんので、この式は有効です。

補足説明
文字列型変数 String
Captionは何故、数字も文字も扱えるのだろうかと、気がついた人も居るかもしれません。実はCaptionというForm1のメンバーはString型の変数で本来は文字列を扱う物です。しかし、厳密にはString型という型は存在せず、Stringというのは、後述するクラスの一つです。Stringという名前のクラスには、数字を文字に自動的に変換して文字として格納するという機能が備わっています。なので、Caption=100やCaption=”100″という式が成り立ちます。

String a=100;
String b=200;
String c=a+b;
Caption = c;

この式を実行しても計算は行われず、表示される値は100200という文字列になります。文字列を連結するのに+を利用します。文字列から文字列を削除するという意味で、a-bという使い方は出来ません。Stringでは連結時のみ+を利用できるだけで、そのほかの算術演算記号を用いて文字列を削除したり、同じ文字を*の数だけ増やしたりはできません。

しかし、実は次のような式が成立してしまいます。

String a=100;
String b=200;
String c=a-b;
Caption = c;

結果は-100として表示されます。+は文字の連結なのに、その他の算術記号ではしっかり計算をしています。これは文字列を数字に自動的に変換して計算を試みるという機能が備わっているためで、+以外の演算記号で計算できてしまいます。

String a=100;
int x=2;
Caption=a+x;

この場合、結果は1002となります。+ なので、文字の連結としてxの値が文字列に変換されてCaptionに格納されます。a*xにした場合は、結果は200となります。
ここで、次の式を見てください。

String a=100;
int x=2;
Caption=x+a;

この式はエラーになります。何故かというと、Stringクラスは他の値と計算や連結をしようとするとき、他の値が左にある場合と右にある場合とで動作が異なる場合があるからです。

String a="値:";
int x=2;
Caption=a+(x*10);

この式では、値:20 と表示されます。

紛らわしいので、String型で+は文字の連結ができる。とだけ覚えておくと、バグに悩まずに済むと思います。

3.4.配列変数

同じ変数名で番号をセットする事で複数の変数を用意することが出来ます。
下の例ではaという変数でint型の連続する領域を5つ確保するという意味になります。

int a[5];
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5:

この配列にアクセスする時は2行目に書いてあるようにa[0]から始まります。5つ確保しているので、0~4までの数字でアクセスします。
配列を使うときは型名 スペース 変数名[確保する数]という宣言をして、変数名[配列の番号]という指定で配列にアクセスします。
また、配列を初期化するときは以下のような方法も利用できます。

int a[]={1,2,3,4,5};

{ }とカンマで変数が必要な数だけ初期値を配置します。配置した数だけ変数が確保されます。

補足説明
変数のサイズ
変数にはサイズが設定されています。

char 1byte □
short 2byte □□
int 4byte □□□□
float 4byte □□□□
double 8byte □□□□□□□□
String 不定 可変長変数

上の例では4バイトのint型をメモリ上に5つ確保するという意味なので、たとえば以下のようになります。
メモリーのイメージ(見やすいように8バイトずつで区切りを入れてます)
■■■■■■■ ■■■■■■■■ ■■■■■■■■ ■■■□□□□□ □□□□□□□□ ■■■■□□□ ■■■■□□□□ □□□□□□□□

■int a[5];で確保
使用中
使用中
使用中
□空き領域

黒塗りの部分が確保されたint a[5];の領域です。int型は4バイトなので4*5=20個確保してます。
メモリの領域はプログラムの中で確保したり解放しているので、空いている部分が連続しているとは限りません。配列を宣言することにより、連続した空き領域を確保する事が出来ます。この話は後述するポインタの話に繋がります。

3.5.ポインタ変数

ポインタ変数の説明の前に、どのように宣言するのかを見てみましょう。

int *a;
int b;

1行目の*aがポインタ変数です。2行目の普通の変数と違うところは*(アスタリスク)が付いている事です。この*は、四則演算の掛け算という意味とは全く関係ないので、掛け算のことは忘れて、ただの記号として覚えましょう。
ポインタが格納出来る値は、メモリのアドレスです。
メモリのイメージを示します。
■■■■■■■■ ■■■■■■■■ ■■■■■■■■ □□□□□□□□ □□□□□□□□ □□□□□□□□
たとえばこのようになります。四角の一つ一つに1~48の番号が付いていると考えてください。
メモリは1バイトごとにアドレス(番号)が割り振られています。この番号を覚えるのがポインタ変数の役目です。
では、どうやってアドレスを記録させ、どのように利用するのか以下に示します。

int *a;
int b=100;
a=&b;
Caption=*a;

変数bは普通の変数なのに、頭に&が付いています。これが普通の変数からアドレスを読み込む為の書き方になります。
ポインタ変数aに保存したアドレスのメモリの内容にアクセスする時は*をaの前に付けます。
アドレスを格納するときはaにアスタリスクは付けません。
これで、変数bに格納された値をポインタ変数*aからアクセスできるようになりました。
*aから値をセットするには*a=200;のようにします。これで、bの値が200になります。

補足説明

ポインタ変数が他の変数と違うところは、どの型のポインタ変数もサイズはOSが32bit環境なら4バイト、OSが64bitなら8バイトという事です。
1バイトは8bitで出来ており、32bit環境では最大のメモリアドレスが32bitで表せる必要があるので、32bit/8bit=4バイト必要になると言うことです。
ビットというのは、0か1かで表す2進数の事であり、この集合によって、大きな数字を表現できるようになっています。
32bitの最大値はこのように表現されます。
11111111 11111111 11111111 11111111
10進数にすると4294967295です。大体4GBになります。32bit環境では4GBまでしかメモリが認識できないということです。

3.6.文字列配列変数

次にchar型の配列について説明します。次を見てください。

char c[]="123456789";
Caption=c;

宣言に長さが定義されていませんがエラーはありません。この表記法では初期値の文字列によってcの配列の長さが決定されます。この文字列の長さは10文字です。c[]はc[10]と宣言されたことになります。9文字しかないのに何故10文字かですが、ダブルクォーテーションで囲った文字列には見えない文字NULL文字(\0)があるのです。このNULL文字によって文字列の終わりをコンパイラが検出します。
char型の配列に後から文字列を入れるには、専用の関数(strcpy関数)を用いて書き込みます。char型配列にc=”abc”;という文法は使えません。Stringがいかに便利なクラスに仕上がっているかがよくわかります。
c[0]=’a';
c[1]=’b';
c[2]=’c';
という書き方もあるにはありますが、効率悪すぎですね。

char c[]="1234";
char *p;
p=c;
Caption=p;

char型のポインタも*を付けて宣言できます。c[]=”1234″;はc[5]で宣言されたchar型配列と同じです。p=c;という式によってポインタpに対してc[0]のアドレスが格納されます。配列変数は連続したメモリ領域に確保されると上の補足説明に書きましたが、配列はポインタと同じで、cと書くことによってアドレスが取得されます。
*cを使った方法で値を1文字だけ読み取るときは*(c+1)などとして記入します。cは連続領域の先頭のアドレス(c[0]のアドレス)が格納されています。cの内容(アドレス)は数字なので、+1する事により、アドレスが次の領域を示すことになります。*cとすることで、アドレスから1文字だけ値を読み出す事が出来ます。括弧は計算と同じで優先順位を示す演算子でしかありません。
Caption=c;のようにアドレスを渡してあげることで、StringクラスがNULL文字を認識するまで文字列をすべて読み込んでくれます。

補足説明
char型の配列ではStringクラスのように文字列を + 記号を用いて連結することは出来ません。仮に、”abc”+”ccc”という式を入力したら先頭アドレスに後続の先頭アドレスを足した値という意味になり、メモリ上の全然関係のない場所を指すことになり、エラーになります。
では、エラーにならない範囲で試してみましょう。

String str = "abc"+1;
Caption = str;

表示される文字は、bcになったはずです。イメージとしては、String str=”abc”;とした段階で、abcをメモリ上に展開し、アドレスを割り当てることによって、後続の+1によって先頭アドレスに1を足した次のアドレスを指すことになります。読み込むのはbからNULLを認識するまでという意味なので、bcになります。
ただし、注意する必要があります。

char *c="abc";
Caption = c;

このサンプルは正常に動きますが、きちんと意味をわかっていないと大きな間違いをしてしまいます。
char *c=”abc”;やString str=”abc”+1;の”abc”はメモリ上に新たに展開するのでは無く、コンパイル済みのプログラムをロードする時に展開されるリテラル文字列というもので、このリテラル文字列はメモリ上の書き込み禁止位置(後から書き換えることが許されない位置)にロードされます。このロードされたメモリはプログラムを終了するまで解放されません。
char *c=”abc”;というダブルクォーテーションの表記があった場合は、コンパイル時に定数として実行ファイルに保存されます。
“abc”という文字列をchar *cに渡すとき、*cは1バイト分のアドレスを受けるだけなのに文字列が渡せるというということは、”abc”はabcという文字列のアドレスということです。アドレスとして格納されるのはaの位置のアドレスで、Stringクラスで読み込むときはNULL文字まで読み込まれます。
char *c=”abc”;
char a[]=”abc”;
の決定的な違いは、*cの方はリテラル文字”abc”のaのアドレスを取得するだけですが、a[]の方はメモリ上の書き込み可能な位置に”abc”を展開するということです。
char a[]=”abc”は
char a[]={‘a’,'b’,'c’,'\0′}としたことと同じ意味です。
配列に個別に値を格納し、アドレスを割り当てているので、a[]=c;としただけでは、アドレスが一つしか読み込まれない上、アドレスのどこまでを読み込んだらいいのかアドレスからは認識できないのでエラーになります。エラーメッセージとしては char*型はchar[]型に変換できないと表示されます。

※書き込み禁止位置に書かれているはずなのに私の環境では、*c=’Z';などと記入することで書き換えることが出来てしまいました。本来は書き換えようとすると強制終了されたりするらしいので、このリテラル文字列の値は絶対に書き換えないでください。

カテゴリー: C++Builder, C++Builder入門 | コメントをどうぞ

C++Builder入門:文字の表示

第一章:基礎知識

2.文字の表示

次にタイトルバーの文字を適当な文字に変更します。
気がついた人も居るかもしれませんが、序章でもやってますね。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Caption = "C++Builder入門";
}

Captionに代入することでタイトルバーの文字列が変わります。

補足説明
序章ではButton1->Captionだったのに、なんでここではCaptionだけでいいのかと、疑問に思った人が居るかもしれないので説明します。
実はCaptionとだけ入力するのは、Form1->Captionと入力したことと同じ意味になります。何故そのような事になっているのかというと、エディタのButton1Click関数を見てください。この頭の部分にTForm1::という表示があります。これはTForm1の中に定義されているという意味があり、この関数はTForm1のメンバーなので、自分の中のメンバー同士であれば自分自身を書き示す必要がないということです。
Button1->Captionという表示も、実は、Form1->Button1->Captionと書くことも出来ます。
さらに、もう一つ別の表記の仕方があります、this->Captionです。これはわざわざForm1と書かなくてもthisと書くことで、自分自身を表します。自分自身の名前を書いておきたい場合など、どこを指し示しているのか、ということがハッキリわかるようになります。
Button1->Captionを省略してCaptionと書く方法はありませんのでご注意ください。

TForm1をForm1と間違って書いてるよ。と思った方も居るかもしれません。実は、this->Caption の他にも、書き方があり、TForm1::Caption という書き方も存在します。しかし、TForm1を利用する場合は、TForm1-> とは書けません。訳がわからないですね。今は、そういうことも出来るくらいに、とどめておいてください。
統一した書き方が出来るので、今後も書くことがあれば、Form1-> という書き方で行きます。

そして、Form1の件ですが、TForm1のメンバーを利用するときは、フォームのメンバーのNameと書かれたところの名前を書いて利用します。エディタの下にデザインというタブがあるので、そこをクリックしてください。フォームが表示されます。
デザイン、コード切り替え

フォームをクリックしてオブジェクトインスペクタのNameを探して右側の値を見てください。それが、現在のフォームの名前になります。
このTForm1という名前もそこを変えるとNameに書いた名前の頭にTが付いた形の名前に自動的に変化します。
以下の画像ではForm1を選択して、オブジェクトインスペクタのNameの値をWindow1に変更した画像です。
TForm1->Name変更

この補足説明で書かれたことは、後述する変数やクラス、名前空間に関わることなので、今すぐ知っておく必要はありませんが、名前を変えたらその変更した名前を使う。とでも覚えておいてください。

文字の表示より補足説明の方が長い…

カテゴリー: C++Builder, C++Builder入門 | コメントをどうぞ

C++Builder入門:計算

第一章:基礎知識

1.計算

1.1.四則演算

プログラミング言語では当然ですが、計算が出来るようになっています。四則演算に使う記号は次の通りです。
+ – * /
+ 足し算
- 引き算
* かけ算
/ 割り算

すべて半角の記号です。全角文字ではないので注意してください。
では、新規にVCLフォームアプリケーションを作成して、そこにTButtonを配置してください。配置したボタンをクリックして、オブジェクトインスペクタCaptionに、計算とでも入力してください。
計算:画面作成
次に、フォームに配置したボタンをダブルクリックして、Clickイベントの関数を作成します。エディタの表示に変わったら次のように入力してください。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
      Caption=1+2;
}

では実行してください。ボタンをクリックすると、ウインドウのタイトルに1+2の結果が表示されます。
他の計算も試してみたかったら式の記号を変えて計算してみてください。

ここでは、Captionに1+2の結果を代入しています。計算式の書き方は

代入先 = 計算式

という、書き方が決まっています。一般的な算数では=の後ろが答えになっていますが、プログラミングでは逆ですので注意してください。このように、表示させたい場所を指定して、普通の計算式を入力するだけで簡単に計算結果を表示することができます。

1.2.計算の優先順位

当然ですが、プログラミングでも計算するときは記号に応じて優先順位が決まっています。ここで使用する四則演算では
* / が一番優先順位が高く + – が次に続きます。同じ優先順位の場合は、順に計算されます。

Caption = 1+2*3;

という計算式を入力すると、計算結果は7になります。普通の計算と同じですね。しかし、たとえば、1+2を先に計算させたいときもあると思います。そこで ( ) を使用します。

Caption = (1+2)*3;

これで、計算結果が9になったと思います。( )はどの演算記号よりも優先順位が高いので、括弧があるところは優先的に計算されます。算数では括弧を多重に書くとき、 [ ] { } ( ) などがありましたが、プログラミングでは ( )だけが利用されています。

Caption = ((4+4)/(2+2))*3;

このようになります。計算結果は6ですね。

以上で計算の説明を終わります。

カテゴリー: C++Builder, C++Builder入門 | コメントをどうぞ

C++Builder入門:プロジェクトとコンポーネントの設定

序章3:プロジェクトとコンポーネントの設定

1.プロジェクトマネージャ
起動して様々なウインドウが一体化して表示されていますが、プロジェクトマネージャというタイトルのウインドウにツリー形式でファイル名が表示されている物があると思います。ここで、ソフトを開発する時に使用するファイルの一覧を表示します。
実行ファイルはプロジェクト単位で管理するようになっています。DLLの作成も1つのプロジェクトファイルによって行われます。
プロジェクトマネージャ

Project1.exeというプロジェクトの配下にProject1.cppというファイルがあります。これがアプリケーションを実行したとき、一番はじめに実行されるファイルになります。
このファイルの中身が実行されることで、フォームが生成されます。このProject.cppは特別なことがない限り触る必要がありません。

次に、Project1.resというファイルがあります。これはリソースファイルといって、アプリケーションの中に直接画像を格納したりする時に利用する物なのですが、こちらも特殊な理由がない限り直接編集して利用することはないと思います。

そして、私たちが頻繁に利用するのがUnit1.cppなど、これから追加していくファイルです。
プロジェクトに新規でフォームやユニットを追加した場合、必ずUnit~.cppというファイルが生成され、プロジェクトマネージャに追加されます。これらのファイルに記述していくことで、ソフトを作っていくようになります。

2.オブジェクト インスペクタ
新規作成でVCLフォームアプリケーションを実行すると、オブジェクトインスペクタというウインドウに様々な名前と値が設定されています。たとえば、ボタンを追加して、ボタンをクリックすると、オブジェクトインスペクタの一番上の表示がButton1 TButtonという表示に変わり、ボタンに関連した各種設定が表示されるようになります。FormをクリックするとForm1 TForm1という表示に変わり、Form1の設定が表示されます。
この一覧に表示された値を変更することで、フォームのサイズやボタンのサイズ、表示位置など様々な設定を行うことが出来ます。

オブジェクトインスペクタ-Button1

前回、マウスで移動させたり、プログラムの中で記述することで位置を合わせたり出来ると書きましたが、ここで、WidthやHieghtを変更すると、コンポーネントのサイズがその値になります。
たとえば、Form1のWidthを200、Heightを300に設定すると、200×300のサイズのウインドウになります。このサイズはタイトルバーや、ウインドウの枠のサイズを含めたサイズになるので、フォームの利用可能な範囲を200×300にしたい場合は、Form1のClientWidthを200、ClientHeightを300に設定します。

ClientWidthなど設定
ウインドウのサイズの最小サイズは通常ではタイトルバーの閉じるボタンなどがあるので、これらを表示しきれるサイズが最小のウインドウサイズということになります。
Widthは横幅、Heightは縦幅です。これらは整数しか入力することが出来ません。
整数以外を入力すると以下の画像のようなエラーメッセージが表示されます。
SnapCrab_NoName_2013-8-6_18-20-23_No-00

Form1のCaptionという項目があります。これを変更するとタイトルバーのタイトルを変更することが出来ます。ここには文字を自由に書き込むことが可能です。
タイトルバーの文字を変更

オブジェクトインスペクタに、プロパティ、イベントというタブがあると思います。これを切り替えることで、コンポーネントに搭載されている、設定とイベントを切り替えて表示することが出来ます。
たとえばButton1のイベントを開くと、OnClickの所にButton1Clickという名前が設定されていますが(以下の画像参照)、これが現在OnClickイベントに設定されているイベント用の関数名という事になります。
赤字で表示されているイベントは、別のコンポーネントとの連携用の物になります。対応するコンポーネントを追加して、Button1のプロパティの該当箇所に適用することで、そのコンポーネントのイベントを表示させることが出来るようになります。

オブジェクトインスペクタ-イベント

3.構造
構造と書かれたウインドウがあります。ここではFormに追加したコンポーネントが一覧で表示されます。一覧はコンポーネントの階層構造を再現して表示されるので、どのグループに所属しているコントロールかが一目でわかるようになっています。
構造ウインドウの説明
上の画像のようにForm1の領域をすべて埋め尽くしてしまうと、Form1のプロパティが操作したくてもFormをクリックしてプロパティを表示できなくなりますが、こういったとき、構造の該当するコンポーネントをクリックすれば簡単に目的のコンポーネントにアクセスすることが出来るようになります。
画像の場合、Form1とPanel2へのアクセスが出来ないので構造から選択します。オブジェクトインスペクタの一番上のコンボボックスをドロップダウン表示させると選択できるようにもなっているので、コンポーネントの数が少ないうちはこちらの方が効率的な場合もあります。
構造の説明2

以上で序章はたぶん終わりです。

次からはプログラミングを中心に書いていこうと思います。未定

カテゴリー: C++Builder, C++Builder入門 | コメントをどうぞ

C++Builder入門:はじめに

はじめに

ここでは私が主に利用しているC++Builderの簡単な使い方を解説していきます。
利用しているC++BuilderのバージョンはXEで、OSはWindows8を利用しています。
画面表示が多少異なる場合があるかもしれませんが、基本的な部分だけを解説していこうと思っています。
最新版ではFiremonkeyというVCLとは別のライブラリがあったり、Mac OS-X対応だったりで追加機能がありますが、VCLアプリケーションを作成する過程に違いはありませんので、多少の違いがあれば対応する参考書籍やサイトをご覧ください。

C++Builderのトライアル版はこちらからダウンロードしてください。
http://www.embarcadero.com/jp/products/cbuilder

ちなみに筆者は日本人ですが日本語が上手ではありません。多少日本語がおかしいところがあるかもしれませんが、推測して読み替えてくださいw読み返しておかしいと思ったところは日々修正を加えています。

カテゴリー: C++Builder, C++Builder入門 | コメントをどうぞ

C++Builder入門:開発環境の環境設定

序章2:開発環境の環境設定

前回はフォーム上にボタンを配置してクリックイベントを実装しました。では、前回と同じようにフォーム上にボタンを配置してください。このフォーム画面上でコンポーネントはマウスのドラッグアンドドロップで好きな位置に配置できるようになっています。 グリッドがあるのできっちりした動きでいいような気もしますが、マウスで微調整をするのが少しやりにくいこともあるかもしれません。 そう言う時は、プログラム上で位置を指定するという事もできますが、そこまでやりたくない。という場合もあるかもしれません。そんなときは、メニューツールをクリックしてオプションをクリックします。

オプション画面

このようなウインドウが表示されると思います。ここで、様々な開発環境の使い勝手を変更することが出来るようになっています。
ここから、左にあるツリーの中から、環境オプション配下のVCLデザイナを選択します。すると以下のような画面が出てきます。
オプションVCLデザイナ
ここの、グリッドサイズを小さくすることで、コントロールの配置を細かく調整できるようになります。筆者の場合は最小の2に設定してあります。
プログラム上で設定すれば完璧に出来ますし、規模が大きくなってくるとそうせざるを経ない状況になってくるとは思いますが。

他にもエディタ設定で、カーソルの挙動やバックアップの設定などが出来るようになっています。エディタ設定配下の色を選択するとエディタ上での特殊なキーワードなどに割り当てる色が変えられるようになっています。
SnapCrab_オプション_2013-8-6_14-39-12_No-00
エディタ設定配下の色を選択するとこのような画面が開くので、その中のC/C++というタブを選択します。
画面上の上の方に表示色のスピード設定という項目があるので、適当に選んでみてください。プレビューに表示されている色が変わります。
この中からベースにしたい色を選択し、プレビュー上でここは変えたいという所をクリックします。すると変更する要素が選択されるので、前景色と、背景色を選択します。そうすることで個別に色を設定することが出来るようになっています。
筆者の場合、トワイライトを選択し、要素は以下のように設定しています。

シンボル 前景色:アクア 背景色:黒
プリプロセッサ/コンパイラ指令 前景色:緑 背景色:黒
予約語 前景色:アクア 背景色:黒
コメント 前景色:ライム 背景色:黒

シンボルは+-*/=などの式で利用する物などの色が変更されます。
プリプロセッサ/コンパイラ指令は#で始まる特殊な命令の色が変わります。
予約語はC++言語で変数名には使えない特別な言葉の色が変わります。
コメントはコメント部分の色が変わります。

このようにオプション画面では、この他にも様々な環境設定が出来るようになっているので、少しずつ理解していくと快適な制作環境を作り上げることが出来るようになります。

前回の画面写真では、筆者の環境と読者の環境でプロジェクトマネージャや構造などのウインドウの位置が違ったと思います。これは各ウインドウごとのタイトル部分をドラッグ&ドロップ出来るようになっていて、画面上の好きな位置に配置する事が出来るようになっています。
ウインドウの端に持って行くとドロップ後の表示が吸い付くように画面端にくっつきます。この状態でドロップすると、ウインドウが環境に一体化します。
配置変更1配置変更2

各ウインドウの左上にあるピンのマークをクリックすると、ウインドウが隠れてタイトルだけが表示されるボタンになります。これはこのタイトルが書かれたボタンにマウスカーソルを合わせるとそのウインドウがスライドして出てくるようになる設定になります。
ウインドウのスライド表示

配置が完了したら、画面右上にあるDefault Layoutと書かれたコンボボックスの右にある2つのボタンの左側をクリックすると、そのレイアウトに名前をつけて保存することが出来ます。
SnapCrab_NoName_2013-8-6_15-4-55_No-00

C++Builderではこのような画面レイアウトを設定できるアプリケーションを自分で製作することも可能です。ただし、実現するには覚えることも多いので、一つの目標としてとらえておくのもいいかもしれません。
今回はここまでです。

カテゴリー: C++Builder, C++Builder入門 | コメントをどうぞ

C++Builder入門:プログラミングの流れ

序章1:プログラミングの流れを覚える

起動したら、まずはメニューのファイルをクリックして新規作成でVCLフォームアプリケーションをクリックします。
新規作成VCLフォームアプリケーション

すると次のような画面になります※筆者は自分の使いやすいように開発環境のレイアウトを変更しています。
この画面に描かれたウインドウ上にコンポーネントと呼ばれるウインドウを構成する為の部品を配置してプログラミングしていくことになります。
新規VCLフォームアプリケーション

部品を配置するには、ツールパレットを開きます。ここではコンポーネントが分類で分けられており必要なコンポーネントをこの中のどこかから選んでフォーム上に配置します。今回はStandardの中にある、TButtonをクリックします。
クリックすると、選択状態になり、この状態でフォーム上のウインドウの枠内をクリックするとボタンが配置されます。
ツールパレットTButton選択

配置したボタンをダブルクリックすると、エディタが開いて、ここではボタンのクリックイベントであるButton1Click関数が自動で追加されます。ここに目的の動作を記入することで、ボタンをクリックしたときの動作を決定することが出来ます。※筆者は自分の見やすいようにエディタの配色を変更しています。
クリックイベントの追加

今回はボタンをクリックすると、ボタンに書かれている文字が変化するプログラムを作成します。
配置したコンポーネントには自動的に名前が割り当てられるようになっており、ここではButton1という名前がつけられているので、エディタでButton1と入力し、続けて、-> と入力します。すると、画像のような入力補助機能が働き、設定したいButton1に含まれている設定やイベントの一覧が表示されます。今回はボタンに表示されている文字を変更するので、Captionを選択してください。capまで入力すると自動的に絞り込まれて、Captionが選択されます。選択された状態でEnterを押すと残りを自動で入力します。
入力補助

続けて、= を入力します。この = は Caption に = の後ろに続く値を代入するという意味になります。
Captionには文字を表示したいので、文字を代入するには”"ダブルクオテーションで表示させたい文字を囲みます。
ここでは、“クリックしました” と入力してください。
最後に;セミコロンを入力してください。これがないとエラーがあるとコンパイル時に怒られます。セミコロンはC言語(C++)での1つの命令の終わりを意味する大切な記号です。覚えましょう。
イベント設定完了

補足説明
セミコロンがなかったときのエラーメッセージ。

エラーの場所を教えてくれます。エラーメッセージの部分をダブルクリックすると該当箇所にエディタが移動してくれます。該当箇所と書きましたがセミコロンがない場合は、次の行が選択されています。セミコロンがないのに関数の終わりのマークが来ているからで、それがおかしいという意味だと思います。
エラーメッセージ

ここまで入力したら、実行ボタン(緑の矢印または緑の矢印にテントウ虫のマークが付いたボタン)をクリックしてください。

または、キーボードのF9を押してください

コンパイル完了クリックしました

実行すると、このようにアプリケーションが実行され、クリックすると、ボタンの文字が変わります。
 
 
 
 
 
プロジェクトの保存
プロジェクトを保存するときはメニューのファイルからプロジェクトに名前をつけて保存をクリックします。コレを実行すると、まず、フォームに関連づけられているUnit1と書かれたファイルを別名で保存できたりします。
Unit1の保存が終わると、プロジェクトファイルが別にあり、コレのファイル名を決めるのですが、プロジェクトファイルの名前が、コンパイルして生成される実行ファイルの名前になります。
保存する場所は、人それぞれですが、必ず、プロジェクトごとにフォルダを分けるようにしてください。そうしないと間違って上書きしてしまい、以前利用していたフォームが使えないなどの不具合が発生します。

カテゴリー: C++Builder, C++Builder入門 | コメントをどうぞ

割と便利なVCL関数のヘルプ

エンバカデロのVCLの便利な関数のヘルプへのリンク先

日付関連ヘルプ

EDNにあったプログラミングTips
http://support.embarcadero.com/article/37504

書くことが特になかった

カテゴリー: C++Builder | コメントをどうぞ

Win7でVBアプリなどからのSqlServerへのアクセス速度が遅い

Win7でやたらADOでのアクセスが遅いと思っていたら、XPでは(local)で使えてたと言う事で、ソフト側でサーバー名にずっとそれを設定していたのが問題でした。
Win7ではサーバー名を空文字にした状態と(local)と言う文字列を設定した場合で同じ動きになっているかのように同じくらいアクセスに時間がかかっていました。
名前の解決の問題なのかな?

サーバー名はローカルの場合、自分のコンピュータ名(コンピュータを右クリックしてプロパティを開いたときに見られるもしくはコントロールパネル→システム)を設定することでADOでのアクセス速度の問題が解決しました。

サーバー名を間違えていた場合はエラーが帰ってくるのに、空文字はOKという意味がよくわからない。

カテゴリー: データベース | タグ: , , , , , | コメントをどうぞ

Excelマクロ:方眼ノートみたいな

Excelでまとめを作れという課題をやるにあたって、セルを成形するのが大変だったのでマクロで作った。
A~ZZまでを方眼ノートみたいに調節

表示でページレイアウトにしたら丁度いい具合に収まるようにサイズを調整してある。

マクロ実行結果

Sub ノート()
  Columns("A:Z").Select
  Selection.ColumnWidth = 2.63
  For Count = Asc("A") To Asc("Y")
    Columns(Chr(Count) & Chr(Count + 1) & ":" & Chr(Count + 1) & Chr(Count)).Select
    Selection.ColumnWidth = 2.63
    Columns(Chr(Count) & Chr(Count)).Select
    Selection.ColumnWidth = 3.88
    Selection.Interior.Color = RGB(255, 245, 245)
  Next
  Columns("ZZ").Select
  Selection.ColumnWidth = 3.88
  Selection.Interior.Color = RGB(255, 245, 245)
  Range("A1").Activate
End Sub
カテゴリー: 未分類 | コメントをどうぞ