|
|
1 |
「Delphiの概念とプログラミングの基礎知識」 |
|
今号から、誌上セミナーとして「土木建築エンジニアのプログラミング入門」が新たに始まります。
プログラミング経験の少ない土木・建築エンジニアのみなさんを対象として、DelphiによるプログラミングとSDK(開発キット)を利用した応用開発事例をわかりやすく解説していきますので、ぜひご期待ください。
|
この誌上セミナーは、2010年11月に出版された『土木建築エンジニアのプログラミング入門 -Delphiで学ぶVR,構造解析のSDK活用プログラミング』(日経BP社刊)の中で取り上げられた内容を要約して簡潔に紹介していくものです。全12回の連載講座を通して、Windowsアプリケーションを構築できるプログラミング言語「Delphi」の基本から、FRAME面内SDKを活用して構造解析でのソルバー利用を行う応用プログラミング、UC-win/Road
SDKを利用したVR開発やプラグイン開発を行う方法、応用開発事例までを解説します。
今後の連載の予定は、以下のようになっています。
「土木建築エンジニアのためのプログラミング入門」 連載予定 |
■ 第1回 Delphi基礎知識講座
「Delphiの概念とプログラミングの基礎知識」 |
■ 第2回 構造解析プログラミング講座(1)
「構造解析のソルバー活用開発〜FRAME(面内)SDKの活用」 |
■ 第3回 構造解析プログラミング講座(2)
「構造解析のソルバー活用開発〜FRAME(面内)SDKサンプルプログラムの使用方法」 |
■ 第4回 構造解析プログラミング講座(3)
「建築構造解析(Mutiframe)オートメーション活用開発」 |
■ 第5回 VR開発講座(1)
「UC-win/Road SDKの構成とUC-win/Roadの構造」 |
■ 第6回 VR開発講座(2)
「実習サンプルコード解説」 |
■ 第7回 VR開発講座(3)
「実習サンプルコード解説」 |
■ 第8回 プラグイン開発講座(1)
「3次元CAD連携プラグイン」 |
■ 第9回 プラグイン開発講座(2)
「EXODUSプラグイン」 |
■ 第10回 プラグイン開発講座(3)
「xpswmmプラグイン/マイクロシミュレーションプレイヤ」 |
■ 第11回 プラグイン開発講座(4)
「OpenGL連携」 |
■ 第12回 応用開発事例講座
「DS/鉄道シミュレータ/施工機械マンマシンインタフェース」 |
|
Delphiの開発環境を使用すれば、Windowsアプリケーションを簡単に作成することができます。プログラミングに慣れてきたら、自分の仕事のちょっとした補助をしてくれるような少し込み入ったプログラムを手がけてみるのもよいでしょう。
この講座を通して、これまでは敷居が高く感じられていたプログラミングの世界が、少しでも親しみやすく楽しいものになることを願っています。また、Delphiプログラミングについて興味を持たれた方は、書籍「土木建築エンジニアのプログラミング入門」で、より詳しく学習に取り組んでみてもよいでしょう。
連載第1回となる今回は、Delphiの特徴や概念、文法の基本やプログラム作成の基礎知識などについて解説します。
DelphiはWindowsアプリケーションを開発するためのプログラミング言語の1つです。Windowsで開発可能な通常のプログラムであれば、すべてDelphiを使用して作成できます。
また、Windows APIをクラスライブラリとして再構築したVCLを持っているため、一般的には煩雑なWindowsアプリケーションのプログラミングを容易に行うことができます。Windowsアプリケーションでは、オブジェクトにあたるWindowsクラスとそのクラスのメッセージを処理する手続きの記述が必要ですが、Delphiではそれらの継承を通じて、かなりの部分をカプセル化しています。これにより開発者は、たとえば「ボタンをクリックしたときの処理」などだけに集中すればよいわけです。
このようなVCLが豊富に用意されているおかげで、Delphiを使用すれば、画面周りの入出力やデザインを短時間で作成できます。また、コンパイル時間が短かいことも特徴の1つです。
■プロジェクトの新規作成
- Delphiで[ファイル]−[新規作成]−[VCLフォームアプリケーションDelphi]を選択し、プロジェクトの新規作成を行います。
- 表示されたウィンドウ内のツールパレットで、配置したいVCLコントロールをクリックして選択します。
- 画面上をクリックすると、その位置に選択したコントロールがデフォルトサイズで配置されます。
- ここでは、オブジェクトインスペクタ(左下)で下表のようにプロパティを設定します。
|
|
Caption |
GroupBox1 => 入力項目 |
Name |
MyGroupBox |
Left |
50 |
Top |
50 |
Width |
200 |
Height |
150 |
|
オブジェクトインスペクタで行った設定はすぐに画面上で反映されるため、直感的なデザインが可能です(左下)。
たとえば、いくつかのコントロールを単純に配置しただけも、右下のように立派なWindowsアプリケーションとなります。
■イベントハンドラの記述
Windowsでは、入力情報を取得したり画面を閉じたりといった操作を、マウスでボタンをクリックするなどの操作によって行います。このように、「ボタンがクリックされたとき」のような処理を記述する部分を「イベントハンドラ」と呼びます。ここでは簡単なイベントハンドラの記述について説明します。
例として、Captionを「OK」としたコントロールButtonOK(Name)を選択し(左図)、オブジェクトインスペクタの「OnClick」の右側の空白欄をダブルクリックします(右図)。
これで、ユニット上にこのボタンをクリックした場合のコードを実装する領域が表示されます。この「begin」〜「end;」の間に、ボタンをクリックしたときの処理を以下のように記述します。
procedure TForm1.ButtonOKClick(Sender : Tobject);
begin
end; |
たとえば「Close;」と記述すると、実行時このボタンをクリックすると画面が閉じられます。
procedure Tform1.ButtonOKClick(Sender : Tobject);
begin
Close;
end; |
必要なイベントハンドラの記述を終えたら、メニューバーの[実行]−「実行」を選択してコンパイルを行います。
コンパイルが正常に終了すると、プログラムが実行されます。
ここでは、ソースコードを記述するにあたって必要となる、ソースコードの構造と使用する値の型についての説明を行います。
プログラミングの基本となる部分なのでしっかり押さえておきましょう。
■ソースコードのファイル構成とユニットの構造
Delphiのソースコードは主に次の3種類のファイルから構成されています。
- プロジェクトファイル(.dpr)
プロジェクトのメインとなるソースファイル。通常はDelphiがソースの内容を自動的に処理してくれる。
- ユニットファイル(.pas)
実際に処理を記述するファイル。主にここにソースコードを記述する。
- フォームファイル(.dfm)
画面デザインなどの情報が記述されるファイル。通常はDelphiが内容を自動的に処理してくれる。
■ユニットファイルの構造
ソースコードは主にユニットファイルに記述します。ユニットは、インタフェース部、実装部、初期化部、終了処理部の大きく4つに分けられます。
ユニットファイルはunitヘッダで始まります。unitの横はファイル名となり、IDEのエディタ上で直接書き換えてはいけません。また、ユニット名は、別ディレクトリにあっても同じプロジェクト内で重複することはできません。プロジェクトファイル名とも同様です。
■変数と定数
プログラムで値を扱うには、変数または定数を使用します。変数や定数は値を入れておく入れ物のようなものです。数学の場合の式とは異なり、以下のような書き方ができます。
この例は、もともとのAという変数の値に1を足したものを、Aという変数に代入する処理となります。変数はプログラムの実行時に値を変更でき、定数はプログラムの実行中、一定の値のままとなります。
■データ型
Delphiで使用するデータには型(データの種類の名前)があります。プログラムで変数や定数を使用するには型を指定する必要があり、指定した型によって、変数に格納できる内容と実行できる操作が決まります。Delphiは型のチェックに厳密な言語であり、型を間違えると目的の操作が実行できない場合があるので注意が必要です。基本的なデータの型としては、以下の4つを覚えておけば十分でしょう。
- 整数型(Integer)
整数を扱う際に使用。100という値をAという整数型の変数に代入する場合は、次のように記述する。
- 実数型(Double)
実数を扱うのに使用。小数点以下を含めて使用できるが、桁数は無限ではないので、完全な精度で値を記憶することはできない。123.456という値をBという実数型の変数に代入する場合は次のように記述する。
- 文字列型(String)
文字列を扱うのに使用。「こんにちは」という文字をCという文字列型の変数に代入するには、以下のように記述する。
- 論理型(Boolean)
論理型は真偽値を代入する際に使用する。真偽値とはTrueとFalseで表現できる値のことで、正しいか正しくないかを判定した結果や、後述する制御文の判断に使用する。
■スコープ
スコープとは、プログラム中で変数名や関数名などの識別子が参照可能な有効範囲のことを指します。変数名や関数名などの識別子は、宣言のスコープ内でのみ使用できます。また、スコープは宣言の場所によって決定されます。
■文とコメント文
文とはプログラムを構成する要素のことです。1文はセミコロンで区切られます。
コメント文は、プログラムの動作そのものには影響しませんが、注釈としてソースコード内に記述しておきたい内容を記述するための文を指します。Delphiでは、「//コメント」のように、「/」を2つ続けた後にコメントの文章を記述します。
■手続きと関数
手続きと関数は、それ自体で完結した文の集合で、プログラム内の他の場所から呼び出すことができます。
手続きと関数はルーチンとも呼ばれます。関数は実行すると値を返すルーチンで、手続きは値を返さないルーチンといえます。
procedure 手続き名(パラメータ1;パラメータ2;・・・);
begin
end; |
手続きは以下のように宣言します。procedureが手続きの宣言となり、beginとend;の間に行いたい処理を記述します。
procedure 手続き名(パラメータ1;パラメータ2;・・・);
begin
end; |
関数は以下のように宣言します。functionが関数の宣言となり、beginとend;の間に行いたい処理を記述します。関数には返す値である戻り値があるためその戻り値の型も一緒に宣言します。
function 関数名(パラメータ1;パラメータ2;・・・):戻り値の型;
begin
end; |
■パラメータ
多くの手続きと関数にはパラメータリストがあります。パラメータリストは、パラメータ宣言をセミコロンで区切って並べ、全体をカッコで囲んだものとなります。宣言の前には、var、const、outのいずれかの予約語を付けることができます。予約語varは変数パラメータ、constは定数パラメータ、outはoutパラメータを表します。予約後を付けない場合は値パラメータとなり、値が手続きや関数に渡されます。
以下のようにパラメータを記述すると、長方形の縦と横の値をパラメータとして関数に渡し、長方形の面積が戻り値となります。
function SquareRectangle( height, width : double ):double;
begin
result := height * width;
end; |
「コンポーネント」とは、プログラムを構成する部品のようなものです。Delphiには多くのコンポーネントが用意されており、これらを活用することで、手間をかけず効率的にプログラムを組むことができます。
■コンポーネントの種類
Delphiに備わっているコンポーネントには大きく分けるとビジュアルコンポーネントと非ビジュアルコンポーネントの2つです。前者は、ボタン、フォーム、ラベル、エディットボックスなどといったWindows標準のビジュアルコントロールをクラス化したライブラリです。GUIを構築するために使用し、プログラムの実行時には目に見える形で表示されます。後者は、ネットワーク通信メソッドやタイマーコンポーネントなどの、画面に表示されないコンポーネントです。
■プロパティ
プロパティとはコンポーネントの属性のことを指し、動作や見ばえなどの設定が行えます。たとえば、Visibleプロパティでは、プログラムの実行時にコンポーネントを表示するかしないかを指定できます。
■メソッド
コンポーネントには、プロパティ以外にもさまざまな「メソッド」が用意されています。メソッドとはクラス内で定義された手続きや関数のことを指します。コンポーネントはクラス定義されているため、コンポーネントで使用する手続きや関数はメソッドとなります。
■イベント
イベントとは、プログラムにより検出されるアクションや出来事のことを指します。Windowsアプリケーションでは主に、ボタンが押されたときやマウスがクリックされたときなどをイベントとして、それに応答する形でプログラムを処理します。
コンポーネントを使用した場合、オブジェクトインスペクタでイベントに対するイベントハンドラを設定することができます。イベントハンドラとはイベントに対する手続きのことを指します。例として、ボタンがクリックされたときにメッセージを表示する処理を指定してみましょう。
- 対象となるボタンが選択されていることを確認します。
- オブジェクトインスペクタのイベントタブをクリックして選択します。
- コンポーネントがクリックされたときに使用するイベントのOnClickを選択し、入力欄をダブルクリックします。
- Button1Clickというイベントハンドラが自動的に作成されるので、ここにメッセージ表示の処理を記述します。
以上で一連の操作は終了です。これだけの簡単な処理によって、ボタンが押されたときにメッセージ「ボタンが押された」を表示させるプログラムが完成します。ほとんどの処理はDelphi側で行われるため、実際に処理を行いたいメッセージ表示の部分だけを記述することでプログラムが作成できます。
ここでは、コンポーネントの配置によって、「メモ帳」のようなテキストエディタ機能を備えたアプリケーションを作成します。アプリケーションの仕様は以下の通りとします。
[実行]−[プログラム] テキスト形式の文字を入力・編集可能メニューから可能な操作
[ファイル]メニュー 新規作成 開く 保存 上書き保存 印刷 終了
[書式]メニュー
■メニューデザインの作成
- まず最初に、ツールパレットから以下のコンポーネントをFormに配置します。
|
|
・TMemo
・TMainMenu
・TStatusBar
・TOpenDialog
・TSaveDialog
・TPrintDialog
・TFontDialog |
- メニューを実装するには、Formに貼り付けられた「MainMenu1」コンポーネントを右クリックして「メニューデザイナー」を起動します。
- メニューデザイナー上で登録したい位置をクリックし、オブジェクトインスペクタのCaptionプロパティに名称を登録すると、同じ名称がメニューに表示されます。
- まず、Captionプロパティに「ファイル」を記入して〔Enter〕キーを押すと、メニューデザイナーとフォーム上に「ファイル」の文字が表示されます。続いて、先に記載した仕様の通りにメニューを登録していきます。区切り線を設定したい場合は、Captionに「-(半角ハイフン)」を登録することで、自動的に区切り線に変換されます。
■新規作成メニュー
メニューを押したときの処理を実装するには、処理するメソッド(関数)を作成して、その処理をメニューのOnClickイベントに割り当てる必要があります。Delphi2010では自動的にこの操作を行ってくれます。オブジェクトインスペクタで「イベント」を選択し、「OnClick」をダブルクリックすると、画面がユニット表示に切り替わって、ソースコードの編集の準備が完了します。該当する箇所には次のように記入します。
これはメモコンポーネントに表示されている文字列を消去するコマンドです。さらに、メモ欄が編集されているかどうかを判別したうえで保存するかどうかを確認する処理が必要ですが、この処理は後で説明する[開く]や[終了]などのメニューと共通化が可能です。
■開くメニュー
新規作成メニューと同様、[開く]メニューのOnClickイベントを作成します。開く処理は以下の2段階が必要となります。
- 開くファイルを選択する
- 選択したファイルをロードする
このアプリケーションでは、ファイルの選択ではテキストファイルのみを対象とします。そのため、OpenDialogのFilterプロパティで以下のように登録します。なお、複数のファイル形式を登録したい場合は、セミコロンで拡張子を区切ります。
ここでは以下のように記述します。
if OpenDialog1.Execute then
begin
if not FileExists( OpenDialog1.FileName ) then
begin
ShowMessage('No File!');
Exit;
end;
memo1.Lines.LoadFromFile( OpenDialog1.FileName );
end; |
OpenDialogでファイルを選択し、ファイルが存在する場合にはそれをロードする処理となっています。[新規作成]メニューと同様、メモ欄が編集されていた場合の対策が必要となりますが、それについては省略します。
■保存メニュー
保存処理を行うには、Memo1プロパティのLinesプロパティの関数SaveToFileを呼び出します。[保存]メニューのOnClickイベントを作成して、以下のコードを記述します。
if SaveDialog1.Execute then
begin
if FileExists( SaveDialog1.FileName ) then
if MessageDlg('File aleady exists. Save now?', mtWarning,
[mbYes, mbNo], 0, mbYes) = mrYes then
begin
Memo1.Lines.SaveToFile( SaveDialog1.FileName
);
end;
end; |
SaveDialogもOpenDialogと同様に、Filterプロパティを設定することができます。
上記の記述を登録すると、ダイアログで表示されるファイルの種類がテキスト形式に制限されます。なお、DefaultExtプロパティに補完したい拡張子(今回であれば「txt」)を登録しておくと、自動的に補完されます。
同様の方法で、「上書き保存」「印刷」「アプリケーションの設定」「書式」メニューなどを実装していきます。詳細は、冒頭でも紹介した書籍『土木建築エンジニアのプログラミング入門』に掲載していますので、興味を持った方は手に取ってみてください。
次回は、「構造解析プログラミング講座(1)」になります。FRAME面内SDKを活用して構造解析でのソルバー利用を行うプログラミングの応用事例について解説する予定ですので、ご期待ください。
有償セミナーのお知らせ
エンジニアのプログラミング入門セミナー CPD認定 |
● 日時 |
2011年1月21日(金) 9:30〜15:00 |
● 受講費 |
1名様 15,750円(税込) |
● 本会場 |
フォーラムエイト東京本社 GTタワーセミナールーム
※TV会議システムにて東京・大阪・名古屋・福岡にて同時開催 |
|
|
(Up&Coming '11 新年号掲載) |
|
|
>> 製品総合カタログ
>> プレミアム会員サービス
>> ファイナンシャルサポート
|