PR

田中 洋一郎

 前回まででKylixのインストールから簡単な操作までを解説しました。しかし,何か具体的な機能を持つアプリケーションを作るまでは「作ってみたんだ」という気持ちにならないのではないでしょうか? 今回は簡単なアプリケーションを作成することで,kylixでの開発手法を一通り紹介します。どんなに難しく複雑なアプリケーションでも開発手法は同じですので,しっかりと押えていきましょう。Kylixは,基本的にはWindowsのビジュアル開発ツールDelphiのLinux移植版です。見た目も操作性も,言語仕様もDelphiとほとんど変わりませんから,気軽に始めてください。

図1●計算機の完成予想図
 アプリケーション第1号として,2つの値を入力して四則演算をしてその答えを求めるアプリケーションを作ってみましょう。四則演算ですから,加減乗除(+-×÷)のどれで計算するかを選べるようにします。図1[拡大表示]が完成予想図です。

 左の2つの四角の中に数字をそれぞれ入れてその間にある演算子(四則演算の記号)を選んで「=」ボタンを押すと,右の四角の中に答えが表示されるようにしましょう。

使用する部品を決めよう

 さて,先ほどの完成予想図を基に画面を作っていきましょう。まずはどんな部品を使っていくかを決めましょう。

 計算機ですので,計算元の値を入力できなければなりません。そこで,文字を入力できる部品が必要です。ここではコンポーネント・パレット内の「Standard」グループにある「Edit」コンポーネントを使います。この計算機では,計算結果の表示も「Edit」コンポーネントを使ってしまいますので,計3個の「Edit」コンポーネントを使います。

 次に四則演算のどれで計算するかを選択するための部品が必要です。いくつかの選択肢を持ちそれを選択させるための部品はいくつか存在しますが,この計算機では「Standard」グループにある「ComboBox」を使いましょう。この部品は選択されているもの以外は「▽」ボタンを押さない限り表示されないという特徴があるので,見た目を計算式に近づけるためにはもってこいの部品です。

 最後に計算のきっかけとする部品,図1の完成予想図では「=」と書かれたものに相当するものが必要です。これは単に押す操作が出来ればよいので,やはり「Standard」グループ内の「Button」を使いましょう。この部品は一般的なものですので説明は不要ですね。

 以上,使用する部品をまとめると「Standard」グループ内の「Edit」,「ComboBox」「Button」の3種類の部品となります。もちろんこれらを貼り付ける「Form」も使用する部品に含まれます。

部品を配置しよう

 では,実際に部品を配置して画面を作っていきます。なにはともあれ,まずは Kylixを起動しましょう。「ファイル」メニューの「アプリケーションの新規作成」を選択してください。空のフォーム編集ウインドウが開いて新規作成されたことがわかります。

 では,まずは「Edit」コンポーネントから配置していきましょう。今回は3つ配置しないといけませんが,まず1個配置しましょう。以下の手順を行ってください。

(1)コンポーネントパレット内の「Standard」タブを選択する
(2)左から5個目にある「Edit」コンポーネントをクリックする
(3)フォーム編集ウインドウのタイトル・バーをクリックしてアクティブにする
(4)フォーム上でクリックする

図2●コンポーネントを選択し,配置する
 すると,「Edit1」と書かれた「Edit」コンポーネントが配置されます。そして,(1)から(4)の手順をあと2回繰り返してください。「Edit2」および「Edit3」と書かれた2つの「Edit」コンポーネントが配置されます。次に「ComboBox」および「Button」コンポーネントを一つずつ,フォーム上に配置します。「ComboBox」コンポーネントは「Standard」タブの左から11個目,「Button」コンポーネントは「Standard」タブの左から7個目にあります。配置方法は上記の手順の(2)が個々のコンポーネントに変わるだけです(図2[拡大表示])。

コンポーネントの初期状態を設定しよう

 ここで一度,「実行」ボタンを押し,アプリケーションを実行してみましょう。。「Edit」コンポーネントと「ComboBox」には,「Edit1」や「ComboBox1」などが表示されています。フォームの編集時には名前が分かって便利かもしれませんが,アプリケーションの実行時には「Edit」コンポーネントには何も表示されない状態,「ComboBox」は四則演算の記号が表示されてる状態でなければいけませんね。

 では「Edit」コンポーネントの実行時の表示を空にしてみます。アプリケーションの実行中は編集ができませんから,まずは「閉じる」ボタンを押してアプリケーションを終了させます。その後,以下の手順を行ってください。

(1)フォーム上の「Edit1」コンポーネントをクリックして選択する
(2)オブジェクト・インスペクタ内の「Text」項目の右側をクリックする
(3)「Edit1」という文字列を消去し「Enter」キーを押す

 この手順を「Edit2」と「Edit3」についても行ってください。フォーム上の各「Edit」コンポーネントの中の文字列が消えます。これで実行時に空の「Edit」コンポーネントが表示されます。

 次に「ComboBox」コンポーネントをまず編集不可にします。以下の手順を行ってください。

(1)フォーム上の「ComboBox」コンポーネントをクリックして選択する
(2)オブジェクト・インスペクタ内の「Style」項目の右側の「▽」ボタンを押す
(3)「csDropDown」から「csDropDownList」に変更する

(3)を行った時点で,フォーム上の「ComboBox」コンポーネントの見た目が変わり,実行時に編集できなくなります。

 次に「ComboBox」コンポーネントの選択肢を設定しましょう。「ComboBox」コンポーネントは文字列を選択肢として持つ部品です。これはプログラムを組むことなく設定することができます。まず以下の手順を行ってください。

(1)フォーム上の「ComboBox」コンポーネントをクリックして選択する
(2)オブジェクト・インスペクタ内の「Items」項目の右側をクリックして選択する
(3)「...」ボタンを押す

図3●「文字列リストの設定」ウインドウ
 すると「文字列リストの設定」という名前のウインドウが開きます。この真ん中のエディタの部分の1行が1つの選択肢となります。では,エディタの部分に全角で図3[拡大表示]のように「+」「-」「×」「÷」の4つを入力しましょう。

 入力したら「OK」ボタンを押してください。ただし,これで選択肢はセットされましたが,実行時に空の表示がされてしまいます。実は「ComboBox」コンポーネントが持つ選択肢には番号が内部的に割り当てられていて,これは先ほどの「文字列リストの設定」の1行目が「0」,2行目が「1」と「0」から順に数字が付けられます。そして「ComboBox」コンポーネント内のどの選択肢が選択されているかは,番号で保持されています。では,この番号を「0」に設定しましょう。以下の手順を行ってください。

(1)フォーム上の「ComboBox」コンポーネントをクリックして選択する
(2)オブジェクト・インスペクタ内の「ItemIndex」項目の右側をクリックして選択する
(3)「-1」から「0」に変更して「Enter」キーを押す

これで「ComboBox」コンポーネントの表示が「+」になりました。

 では残りの「Button」コンポーネントですが,これは表示を「=」に変更しましょう。以下の手順を行ってください。

(1)フォーム上の「Button」コンポーネントをクリックして選択する
(2)オブジェクト・インスペクタ内の「Caption」項目の右側をクリックして選択する
(3)「Button1」から「=」に変更して「Enter」キーを押す

サイズの調整をしよう

図4●フォームの大きさ,位置を修正する
 個々のコンポーネントの初期状態の設定が終わったところで,大きさを調整しましょう。図4[拡大表示]を参考にしてください。大きさの変更は,変更したいコンポーネントを1度クリックして選択し,表示された小さい四角のグリッドをドラッグします。位置の変更はコンポーネントをドラッグするだけです。

計算処理を書いてみよう

 これで画面が出来上がりました。では,いよいよ「=」ボタンを押したときの計算処理を作成していきましょう。まずは「=」ボタンを押したときのイベント処理を書きましょう。そのためには,フォーム上でまず「=」ボタンをダブルクリックします。するとソース編集ウインドウが手前に表示されます。

 KylixはObject Pascalという言語を採用しています。Pascalでは,ブロックは“begin”と“end”で囲まれたものになります。この場合,“procedure”文の次の行のbeginと,の2行下のend;の間に処理を記述できます。また,手続き内で使用される変数はprocedure文とbeginの間にvarという予約語に続いて記述します。では,リスト1のように記述してください。最初にしてはちょっと長いプログラムかもしれませんが,順を追って見ていきましょう。

 まず(1)は,この手続き内で使用する変数を宣言している部分です。Pascalではあらかじめ使用する変数はこのようにまとめて最初に宣言する必要があります。変数宣言の開始を表すvar句の後に続けて変数を定義していきます。ここでは v1,v2,v3 の3つの変数をInteger型,つまり整数を持つことのできる型として宣言しています。

 変数宣言のあと,いよいよイベント処理を記述します。まずは入力された2つの値を先ほどの変数v1,v2に入れる処理を記述しましょう。それが(2)になります。

 「Edit」コンポーネントに入力された文字列は,Textという名前で格納されています。これはコンポーネントの初期状態を設定した時に使用したものでしたね。実行して何も入力されなければ,Textの内容は空っぽですが,何か入力されていれば,Textの内容も入力された内容になります。Textは「Edit1」および「Edit2」の持ち物なので,記述する時には(2)のように,「Edit1.Text」とコンポーネントの名前のあとに「.」でつなげてTextを記述します。

 ここで「Edit」コンポーネントにはさまざまな文字を入力できます。当然アルファベットや漢字なども入力できます。「Edit」コンポーネントが持つTextは,実は string型なので,そのままでは計算させることができません。つまり,数字を数値とするための変換が必要になるのです。その変換処理を行ってくれるものが「StrToInt」関数です。これに数字の文字列を渡すと,それがInteger型に変換されて計算できるようになります。(2)では,StrToInt関数を使って,入力された数字を数値に変換して変数に格納しています。Pascalでは,変数などへの値の代入は「:=」を使います。「=」としないように気をつけましょう。

 次にどの計算をするかを判断しないといけません。これは「ComboBox」コンポーネントが持っていて,どの記号が選択されていたのかを見ることが必要ですね。「ComboBox」コンポーネント内の何の項目が選択されているのかは,「ItemIndex」という名前で保持されています。これは初期状態にするときにも使いました。「+-×÷」が「0123」という順に番号が付けられて,その値をItemIndexは持っています。つまり,ItemIndexの値により計算法を変えればよいのです。

 (3)は「case~of」構文を使って計算を切り替えています。「~」の部分には,切り替えるための値,つまり「ComboBox1.ItemIndex」を書きます。そして,番号と「:」を使ってそれぞれの値の場合の式を記述します。v1とv2をそれぞれ計算し,結果をv3に格納しています。

 ここで(4)を見てください。ここでは割算を行っています。他の多くの言語では,割算は「/」を使います。もちろん Pascal においても「/」は割算の記号ですが,特に割算の結果を整数として扱う(四捨五入してしまう)ときには「div」を使わなければなりません。v3はInteger型,つまり整数しか格納できませんので,今回は「div」を使いましょう。

 ここで「case~of」構文において,もし条件に一致しなかった時(ここでは ComboBox1.ItemIndex の値が0~3でなかったとき)に何かを実行したいときには,(5)のように「else」と記述し,その後に実行したい処理を書きます。今回は「0~3」でないことはありえないのですが,念のためにv3に“0”を入れておきましょう。

 最後に答えを表示しなければいけませんね。結果は「Edit3」に表示します。これは先ほどのTextにv3の値を格納すればよさそうです。しかし,ここでも型の違いに関する問題があります。Textはstring型ですが,v3はInteger型です。そのままでは受け渡しできません。先ほど「string→Integer」のときには StrToInt関数を使いました。今回はその逆をやってくれる「IntToStr」関数を使います。これにv3を渡して,答えの数値を数字にして「Edit3.Text」に格納してあげれば,めでたく答えが表示されます。

図5●計算機の実行画面
 では実行してみましょう。「実行」ボタンを押してください。そして2つの数字を入れて計算式を選択し「=」ボタンを押してみましょう。見事,答えが表示されたでしょうか(図5[拡大表示])。成功したらおめでとうございます。最初のアプリケーションの完成ですね。

 今回は,計算機アプリケーションを通じて画面の構築とイベント処理を作りました。Linuxのプログラミングがここまで簡単にできてしまうことは驚きですし,Visual Basicの経験者であれば,ほとんど開発手法に違いを感じないほどでしょう。基本的にKylixの開発は今回の手順の繰り返しなのですから。次回はイメージを表示するアプリケーションを作成してみます。おたのしみに。