AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
09:簡単計算ソフトを作ってみよう(1)
 
コンピュータは日本語で「電子計算機」と翻訳されますが、ここでは簡単な計算を行うためのソフトウェアを作ってみましょう。まずは、フォルダの準備を行います。プログラムを作成して保存・作業を行うフォルダを予めエクスプローラで作成しておきます。
 
Windowsに添付されているファイル管理ツール「エクスプローラ」を動かします。Windowsの「スタート」メニューから、「プログラム」メニューの中、或いは、「プログラム」メニューの中の「アクセサリ」内に「エクスプローラ」はあります。
 
画面左側のツリー表示の中の「マイ コンピュータ」内にある、「ローカル ディスク(C:)」内の「DelphiProgram」フォルダ内の「test」フォルダをクリックして反転表示(選択状態)にします。
 
メニュー「ファイル」→「新規作成」→「フォルダ」をクリックして選択します。

初期状態が「新しいフォルダ」という名前でキー入力編集状態となっています。

フォルダ名を「chap09」と決めて入力します。最後に[Enter]キー(改行キー)を押すか、どこかでマウス左クリックして下さい。
 
画面左側のツリー表示の中に、
「ローカル ディスク(C:)」
 →「DelphiProgram」
  →「test」
   →「chap09」
というフォルダが新しく作成されるのを確認して下さい。

Delphi6を起動し、
Delphi6のメニュー「プロジェクト」内の「オプション」をクリックします。

「プロジェクト オプション」画面が表示されます。
「ディレクトリ/条件」ページをクリックして内容を見ます。

「ディレクトリ」内の設定
 「出力ディレクトリ」
 「ユニット出力ディレクトリ」
 「検索パス」
 「デバッグ用ソースパス」
 「BPL出力ディレクトリ」
 「DCP出力ディレクトリ」
の各設定を
「C:\DelphiProgram\test」
から
「C:\DelphiProgram\test\chap09」
に変更して[OK]ボタンをクリックして下さい。

オブジェクトインスペクタ画面でフォーム Form1 の下記プロパティを指定します。
Caption:「簡単計算ソフト」
Scale:「False」
Font/Name:「MS ゴシック」
Font/Size:「10」

プログラミング作業はほとんど行っていませんが、最初にまず保存を行っておきます。
 
メニュー「ファイル」→「名前を付けて保存」をクリックして下さい。

「Unit1に名前を付けて保存」画面が表示されます。
 
「保存する場所」には、先に作成したフォルダ「C:\DelphiProgram\test\chap09」を選択します。

ファイル名は「Unit1.pas」のまま[保存]ボタンをクリックして下さい。

メニュー「ファイル」→「プロジェクトに名前を付けて保存」をクリックして下さい。

「Project1 に名前を付けて保存」画面が表示されます。
 
「保存する場所」は、先で既に「C:\DelphiProgram\test\chap09」を選択していますので、そのままで構いません。

ファイル名を「SimpleCalc」と入力して[保存]ボタンをクリックして下さい。
 
ここで指定するこのプロジェクトのファイル名が、作成するソフトウェア・プログラムのファイル名となりますので注意して下さい。
 
これで最初の準備が出来ました。
それでは、作成するソフトウェア・プログラムの画面デザインを行っていきます。
 
計算を行うためには、計算する数値を入力する必要があります。コンポーネントパレット[Standard]の中に、文字や数値入力を行うための「Edit」コンポーネントがあります。
「Edit」コンポーネントをクリックして選択し、

フォーム Form1 画面上でクリックして Edit1 オブジェクトを配置します。

コンポーネントパレット[Standard]の中の「Label」コンポーネントをクリックして選択します。

フォーム Form1 画面上でクリックして Edit1 オブジェクトの右横にLabel1 オブジェクトを配置します。

オブジェクトインスペクタ画面でLabel1 オブジェクトの Captionプロパティを「+」と指定します。

同様に、コンポーネントパレット[Standard]の中の「Edit」コンポーネントをクリックして選択し、フォーム Form1 画面上でクリックして Edit2 オブジェクトを配置します。

3つのオブジェクトで画面幅を取りすぎてしまいましたので、マウスドラッグにより、各オブジェクトの大きさを変更して左方向へ移動します。

コンポーネントパレット[Standard]の中の「Button」コンポーネントをクリックして選択し、フォーム Form1 画面上でクリックして Button1 オブジェクトを配置します。

オブジェクトインスペクタ画面でButton1 オブジェクトの Captionプロパティを「=」と指定し、マウスドラッグによって大きさを小さくします。

更に、コンポーネントパレット[Standard]の中の「Edit」コンポーネントをクリックして選択し、フォーム Form1 画面上でクリックして Edit3 オブジェクトを配置します。

Edit1 に1つ目の数値を入力し、Edit2 に2つ目の数値を入力し、[=]ボタンを押すと、2つの数値の足し算を行ってその結果をEdit3 に表示させます。

[=]ボタンを押したとき、つまり、Button1 をクリックした時に計算を行う、という事は、Button1 オブジェクトの OnClickイベント内で計算・結果表示を行うプログラミングを施します。
 
オブジェクトインスペクタ画面でButton1 オブジェクトの OnClickイベント欄でダブルクリックすると「Button1Click」という文字が入ります。

コードエディタ画面に
procedure TForm1.Button1Click(Sender: TObject);
begin
 
end;
というプログラムコードが追加されます。

コードエディタ画面で、下記のように記述します。
// 計算
procedure TForm1.Button1Click(Sender: TObject);
var
 a , b , c : integer ;
begin
 a := StrToInt(Edit1.Text) ; // a ← Edit1
 b := StrToInt(Edit2.Text) ; // b ← Edit2
 
 c := a + b ; // 計算 結果はcに入れる
 
 Edit3.Text := IntToStr(c) ; // Edit3 ← c
end;
 
※上記ではHTMLの都合上、全角空白文字を使っていますが、実際には、半角空白やTAB文字を使って記述して下さい。

作成したプログラムを保存します。
 
メニュー「ファイル」→「すべて保存」をクリックして下さい。

プログラムのコンパイルを行います。
 
メニュー「プロジェクト」→「SimpleCalc を再構築」をクリックして下さい。

プログラムのコンパイル(再構築)を行うと、その経過・結果を示す画面が表示されます。[OK]ボタンをクリックして下さい。
もしエラーがある場合にはその旨を表示しコンパイルは完了しません。

コンパイル(再構築)が正常終了したら、出来上がったアプリケーション・プログラムを実行してみて下さい。
メニュー「実行」→「実行」をクリックして下さい。

作成したプログラム「SimpleCalc」が実行されます。
 
画面の右上にある[×]ボタンをクリックすると終了されます。

1つ目の入力欄(Edit1)に「10」をキー入力し、2つ目の入力欄(Edit2)に「20」をキー入力し[=]ボタンをクリックして下さい。
 
3つ目の欄(Edit3)に、足し算の結果の「30」が表示されます。


 
プログラムについて考えてみます。
// 計算
procedure TForm1.Button1Click(Sender: TObject);
var
 a , b , c : integer ;
begin
 a := StrToInt(Edit1.Text) ; // a ← Edit1
 b := StrToInt(Edit2.Text) ; // b ← Edit2
 
 c := a + b ; // 計算 結果はcに入れる
 
 Edit3.Text := IntToStr(c) ; // Edit3 ← c
end;
Editオブジェクトに入力した内容は、Editオブジェクトの「Text」プロパティに格納されます。つまり、Edit1 オブジェクトに入力した内容は「Edit1.Text」として取り出す事が出来ますし、同様に、Edit2 オブジェクトに入力した内容は「Edit2.Text」として取り出す事が出来ます。しかしこの Text プロパティは文字列ですので、文字列をそのまま計算式の数値として使う事は出来ませんので、Delphiが標準で持っている文字列から整数値への変換関数 StrToInt を利用しています。「a := StrToInt(Edit1.Text);」は、Edit1に入力した文字を整数値に変換して、その変換結果の値を変数「a」に代入しています(変数「a」に値を入れています)。
 
数学でのグラフ等では「y = ax + b」(直線の方程式)において、aは傾きを表す定数(決まった数値)、bは切片を表す定数で、xは、水平X軸でのどこかの値、yは x値が決まった時のそれに対応する垂直Y軸の値、つまりこの式において、x,yは 取りあえず決まっておらず変化する値、変わる数、これを変数と呼びます。
 
プログラミングにおいては、変数は、値を記憶しておくための箱、という意味合いもあります。例えば上記の場合、Edit1に入力した数値を変数 a に記憶しておく、という意味があります。

変数 a に記憶した内容は、いつでも取り出す事が出来ます。取り出しても中身はそのまま残ります。別の内容を入れる事で書き換える事も出来ます。
 
「a := StrToInt(Edit1.Text);」で、Edit1に入力した文字を整数値に変換して、その変換結果の値を変数「a」に代入します。「b := StrToInt(Edit2.Text);」で、Edit2に入力した文字を整数値に変換して、その変換結果の値を変数「b」に代入します。
「c := a + b ;」では、変数「a」の内容と 変数「b」の内容を足し算し、その結果を変数「c」に代入します。
「Edit3.Text := IntToStr(c) ;」では、整数値を扱う変数「c」の内容を文字列に変換して、Edit3.Text つまり Edit3 オブジェクトの Text プロパティに代入しています。これにより、入力欄 Edit3 オブジェクトの内容が書き変わります。関数 IntToStr も、Delphiが標準で持っている整数値から文字列への変換関数です。
 
以上、変数「a」「b」「c」を使いました。
しかし、Delphiでは、プログラム内で使った変数は「変数宣言」を行う必要があります。こういう変数を使いますよ、という宣言です。それは、「begin・・・end」の直前の
var
 a , b , c : integer ;
という部分です。これは、
var a,b,c : integer ;
というように1行にしても構いませんし、
var
 a : integer ;
 b : integer ;
 c : integer ;
のように分けて書いても構いません。しかし、
var
 a : integer ;
var
 b : integer ;
var c : integer ;
のように「var」を複数書いてはいけません。「var」は1つです。これにより、
procedure TForm1.Button1Click(Sender: TObject);
var
 a , b , c : integer ;
begin
  ・・・
end;
の中で、変数「a」「b」「c」を使う事が出来ます。同じ変数名を連続して何度も宣言する事は出来ません。変数名には制限があります。
変数名は、半角英字,半角数字,半角下線記号(_)を使う事が出来ます。
最初の1文字は、英字又は下線記号(_)を使います。
英字の大文字・小文字は区別されません。同じものとして識別されます。
変数名の長さは任意ですが,最初の 255 文字だけで識別されます。
(※長すぎるとプログラムが読みにくくなるので ほどほどに)
以下の予約語は使用できません。指令も使用しない方が良いでしょう。
◆予約語
and  array  as  asm  begin  case  class  const
constructor  destructor  dispinterface  div  do  downto
else  end  except  exports  file  finalization  finally
for  function  goto  if  implementation  in  inherited
initialization  inline  interface  is  label  library
mod  nil  not  object  of  or  out  packed  procedure
program  property  raise  record  repeat  resourcestring
set  shl  shr  string  then  threadvar  to  try  type
unit  until  uses  var  while  with  xor
◆指令
absolute  abstract  assembler  at  automated  cdecl
contains  default  dispid  dynamic  export  external
far  forward  implements  index  message  name  near
nodefault  on  overload  override  package  pascal
private  protected  public  published  read  readonly
register  reintroduce  requires  resident  safecall
stdcall  stored  virtual  write  writeonly
 
ここで宣言した変数は、他のイベントハンドラ等では使えません。他のイベントハンドラでは別途、変数宣言を行う必要があり、その中でのみ、その変数を使う事が出来ます。これを「ローカル変数」と呼びます。他のイベントハンドラで同じ名前の変数を使っても構いませんし、内容もそれぞれ別物として扱われます。
 
「integer」は整数である事を示します。「var a : integer;」で「整数の変数 a を使います」と宣言する事になります。これを「型」と呼びます。型にはその他に、単精度実数を扱う「single」、倍精度実数を扱う「double」、文字列を扱う「string」、ブーリアン値(真か偽か)を扱う「boolean」などがあります。
大文字・小文字の区別はありませんので、「single」は「Single」や「SINGLE」でも構いません。 
 
さて、このプログラムですが、
実行直後に数値を入力せず、すぐに[=]ボタンを押してみます。

プログラム開発環境で実行している場合には、その開発環境での例外(エラー)発生画面が表示されます。
[OK]をクリックして下さい。

例外(エラー)が出るとそこでプログラムは一時停止しますので、続行しますので、メニュー「実行」→「実行」をクリックして下さい。

プログラム実行が続行され、今度は、作成中のプログラム自身の例外(エラー)発生画面が表示されます。
例外発生画面表示を行うプログラミングをせずとも Delphiが自動的に画面表示を行ってくれます。但し、例外発生をした箇所で終了します。

この例外は、「a := StrToInt(Edit1.Text);」の箇所で起きていますが、この Delphi標準関数 StrToInt は、数字ではない文字を変換しようとすると例外が発生します。
例外発生した理由としては、Editオブジェクトの Text プロパティの最初の内容がまずいので、画面デザイン時にオブジェクトインスペクタで指定しておく事も出来ますが、今回は、プログラムを動かした時に内容を初期化するようにします。

オブジェクトインスペクタ画面でフォーム Form1 の イベントページの OnShowイベント欄でダブルクリックします。すると自動的に「FormShow」という文字が入り、コードエディタ画面に
procedure TForm1.FormShow(Sender: TObject);
begin
 
end;
というプログラムコードが追加されます。

プログラムを実行すると、
Form1の
  OnCreate イベント
    ↓
  OnShow イベント
    ↓
  OnActivate イベント
    ↓
  OnPaint イベント
の順で実行されます。
OnCreate時には画面上に配置した各オブジェクトの準備が出来ておらず、OnActivate、OnPaintイベントはプログラム実行中にも発生しますので、起動時に1度だけ動かすような処理は、OnShowイベントハンドラで記述するのが簡単です。

コードエディタ画面で
// 起動時
procedure TForm1.FormShow(Sender: TObject);
begin
 // 初期化
 Edit1.Text := '0' ;
 Edit2.Text := '0' ;
 Edit3.Text := '' ;
end;
と記述します。

メニュー「ファイル」→「すべて保存」をクリックしてプログラムの保存を行い、メニュー「プロジェクト」→「SimpleCalc を再構築」をクリックしてプログラムのコンパイルを行い、コンパイル(再構築)が正常終了したら、出来上がったアプリケーション・プログラムを実行してみて下さい。
メニュー「実行」→「実行」をクリックして下さい。
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
 01 02 03 04
 05 06 07 08
 09 10 11 12
 13 14 15 16
 17 18 19 20
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.