‘DeiphiAllStars’ タグのついている投稿

3.1 Object Pascalの基礎知識

2019年1月31日 木曜日

はじめに

さて、本章ではDelphiプログラミングの本質、「Object Pascal」を使った実践的プログラミングに入っていきます。
ただ、Delphiプログラミングは大変奥が深く、仮に本章ですべての機能を網羅した場合、プロフェッショナル向けでこそあっても、初心者には到底理解し難い内容になってしまいます。そこで本章では、基礎の基礎を押さえた初歩的なプログラムを作ります。第2章で作ったメモ帳をベースに幾分機能を拡張したメモ帳を作ります。それでは始めましょう。

その前に、delphi のソースコードの構造化を説明していきましょう。
まず、第2章の計算プログラムは保存せずに閉じてしまって構いません。

メニューから、「ファイル」→「新規作成」→「その他」をクリックし、新規作成の際のダイアログを表示します。ダイアログ上でvclフォームアプリケーションを選択します。

次に、プロジェクトマネージャーから「新規プロジェクトを追加」ボタンを押します。
そして新規作成の際のダイアログを表示し、そこから 「マルチデバイスアプリケーション」を選択します。

さて、これで準備は整いました。
では説明に入っていきます。
まずは vclフォーム アプリケーションからです。
プロジェクトマネージャからProject1.EXEをダブルクリックしてから、 unit1.pasをダブルクリックし、Unit1にフォーカスを移します。

ソースコードの各部の意味

パスカルのソースコードの形式

unitキーワードの後ろにユニット名を記述します。 このユニット名はファイル名になりますが、自動的に設定されるため、手動で変更する必要は先ずありません。

インターフェース部と読みます。
各種の定義と宣言を記述します。
直接のプログラムコード(実行部分)は記述できません。

ファイル内で利用する、クラスを記述します。ここで言うクラスとはDelphiの関数やライブラリが記述された独立したファイルであり、別名「クラスライブラリ」とも呼びます。多くの場合、ここには自動でクラスが登録されていきます。手動で変更する必要がある場合は開発者(つまりあなた)が直接Delphiの機能を呼び出す場合などです。

型の定義を記述します。
型名=型の定義、
といった形で型を定義していきます。

【Private 宣言とPublic 宣言について】
Private 宣言とはプライベートの空間という意味です。
つまりこの例で言うと、Unit1.pas内部でのみ使えます。
外部のユニット、つまり、Unit2等はUnit1のプライベートに立ち入ることはできません。そのため、このプライベート空間に書かれた宣言はUnit 2は参照する事は出来ません。
対して、 Public 宣言は文字通りパブリックな空間という意味です。
当然ながら、パブリックは公共という意味ですので、ここに書かれた宣言はプロジェクト全体で共有されます。

注意が必要なのは宣言の管理です。ここで書かれた宣言は「グローバル」な宣言になります。 プライベートであれ、パブリックであれ、ユニット内もしくはプロジェクト内で共有されます。
例えば、この種の宣言をいたずらに多数行った場合、「名前空間が汚れる」 といった現象が起きます。
これはグローバル変数を多数宣言することにより、似たような名前、似たような機能の変数が宣言されることにより、変数管理が難しくなる現象のこと指します。そのため、無用のグローバル変数はなるべく避けた方が賢明でしょう。

変数の宣言を記述します。
これは大変よく使いますので、必ず覚えましょう。

「実装部」とも呼びます。
関数や手続きなどの処理を記述します。
型の定義や変数宣言を行うこともできます。

{初期化部}
この初期化部に記述されたコードはプログラム開始自動的に実行されます。
ただし、このコードは省略可能なため、使用時には宣言を入力する必要があります。
ソースコードの一番下、「end.」の上に記述します。

{終了処理部}
この終了処理部に記述されたコードはプログラム終了直前に実行されます。
ただし、このコードは省略可能なため、使用時には専念を入力する必要があります。
ソースコードの一番下、「end.」の上に記述します。

この記号は「フォームが存在します」と言う IDE 内部が使う記号です。
この記号がないと、リンカがフォームファイル(*.dfm)を見つけられなくなってしまいます。


一つの宣言や処理を行う単位となります。
ちなみに、この1行当たりの文の事をステップと呼びます。
また、文には大文字、小文字の区別はありません。
(例:10行=10ステップ)

ブロック
Begin と end で囲まれた範囲のことを指します。
特徴として、複数の処理をまとめることができます。
また、このブロックとは処理のまとまりを示します。

コメント
ソースコード注釈のことを指します。
コメントの種類には、

ソースコードの終端記号です。
この記号より先にはソースコードがあってはいけません。

では、プロジェクトマネージャー から、 Project 2. EXE の下にあるunit2.pasをダブルクリックし、フォーカスを映します。

Fire Monkeyアプリケーションも、基本的な構文は同じです。

この記号が若干異なり、dfmからfmx になっています。
機能は全く同じです。

ここで、usesの宣言のところよく見てください。
先ほどのvcl アプリケーションのusesの宣言とはクラスの名前が若干異なることに気がついたかと思います。同じ delphi アプリケーションですが、vcl とマルチデバイス(Fire Monkey)では使用するコンポーネント全く異なります。 いくつかのクラスは vcl と共通のものはありますが、fmx で始まるクラス名はマルチデバイスアプリケーション(Fire Monkey)独自のクラスになります。

基本的な説明は以上になります

2.4 アプリケーションの実行とテスト

2019年1月31日 木曜日

アプリケーションの実行とテスト

コンパイル/ビルド/デバッグ/実行

これらの作業(コンパイル/ビルド/デバッグ/実行)は人間が理解できるPascal言語の記述をコンピュータが理解できる機械語に翻訳する作業になります。
Delphiを始め、Pascal系のすべての言語に共通する事であり、同じ作業を必要とする言語にC言語、C++言語が該当します。これらの言語を総称して「ネイティブコンパイラ」と呼びます。

似たような仕組みの言語に「インタプリタ」系の言語があります。有名どころとしては「Java」、「C#」、「VB.net(VB)」が存在します。但し、インタプリタ言語は「ネイティブコンパイラ」系の言語と異なり、アプリケーション単体では動かず、それぞれの言語に対応したライブラリをパソコンにインストールしておかないと、アプリケーションを起動する事が出来ません。逆に言うと、このライブラリさえインストールすればWindowsでも、Macでも、Linuxでも同じ実行ファイルで動いてしまう事になります。(特定のOS環境に依存した機能を使ったり、書き方をした場合は除く)

上記の言語と一線を画するのが「スクリプト」系言語です。「インタプリタ」系言語と同じでライブラリを必要とします。このスクリプト系言語の最大の特徴はただのテキストファイルが実行権限を持って動いてしまう事です。この最大の強みは特定の開発環境がなくとも、極端な話、メモ帳一つで作れてしまう事です。
では、早速作業に入りましょう。
先ず、拡張子を表示できるようにします。
Windows7なら、コントロールパネルを起動し、表示方法を「大きなアイコン」にして、「コントロールパネル」→「フォルダーオプション」→「表示」から、「登録されている拡張子を表示しない」のチェックボックスを外します。

Windows10なら適当なフォルダを開くか、エクスプローラを起動し、「表示」タブを選択、ファイル名拡張子のチェックボックスを入れます。

実行すると、今日の日時を表示してくれるプログラムをネイティブコンパイラ(Delphi)、スクリプト(Visual Basic Script)で作っていきます。

Delphiで実行した場合

コンソールアプリケーションを新規に作り、以下のコードをtryとexceptの間に記述し、実行します。
ソース7

実行結果:

メモ帳を起動します。(Windows7なら、スタートメニューのファイル名を指定して実行から、「notepad」と入力、Windows10なら、コルタナに「notepad」と入力し,Enterを押します)
Visual Basic Script:下記をメモ帳に記述し、「nowtime.vbs」という名前で保存します。完了したら、そのファイルをダブルクリックします。

ソース8


違いが判りましたでしょうか?Delphiで記述するには必ずDelphiが必要で、僅かでも変更をするには必ずDelphiで編集しないとなりません。
対して、スクリプトはメモ帳一つでも作れてしまいます。

コンパイル(ビルドも含む)が実行形式プログラム(*.exe)を出力する迄の動き

「Pascalソースファイル(*.pas)」

コンパイラ

「フォームファイル(*.dfm、又は*.fmx)」
「中間オブジェクト(*.dcu)」
「リソースファイル(*.rex)」

リンカ

「実行形式プログラム(*.exe)」

プログラムのテスト

コンパイラとリンカが動いて、実行形式プログラムが生成されても、これでプログラムが正しく動くとは限りません。
先ほどのプログラムを保存が完了したら、新しいプロジェクトを作ります。
メニューから「ファイル」→「新規作成」→「VCLフォームアプリケーション」を選ぶか、ツールバーから新規作成を選びます。
の中から、を選びます。
すると、見慣れた新規作成のダイアログが出るので「VCLアプリケーションを選びます」。
新しいフォームが表示されるので、以下の画面の様にコンポーネントを配置します。

配置するものは「Edit」コンポーネント2つ、「Button」コンポーネント1つです。
Editコンポーネント二つのTextプロパティを数字の「0」に、
ButtonコンポーネントのCaptionプロパティを「足す」にします。
Buttonのイベントハンドラを記述します。Buttonコンポーネントをダブルクリックします。
ソース9をイベントハンドラに貼り付けます。


ツールバーの中から、右の図のを押します。
すると、コンパイルが始まります。
正常な計算結果

論理エラーが発生した例

この論理エラーはプログラム設計時に想定された入力が数値と仮定していたものの、実際には数値ではなく、文字列が入力された事によって生じます。例示したものは単純ではありますが、このような事は実際に何かを作ってみると、よくある事で、細心の注意が必要です。今回は入力という見やすいものでしたが、これがインターフェースからは見えない内部的な処理だったりすると、とても厄介なものになります。

設計時エラーの例

今度は、設計時エラーを実践してみましょう。
ソース10を先ほどのイベントハンドラの記述と置き換えます。


そして、を押すと、ビルドが始まり、コンパイルの段階でエラーが表示される筈です。

「OK」を押すと、以下の様に31行目が赤く表示される筈です。
イタリック表示にしたところが、エラーの原因箇所です。(IDEではこの様に表示はされません)
ShowMessage({IntToStr}(StrToInt(Edit1.Text) + StrToInt(Edit2.Text)));
では、エラーを修正しましょう。
{IntToStr}の、グリーンの箇所を削除しましょう。
IntToStrとなる筈です。
出来たら、を押して、ビルドをして実行しましょう。今度は実行できたはずです。
先ほどのエラーの意味は「文字列を期待したのに、数値が入っていたので、実行できませんでした」というエラー結果でした。
「IntToStr」はInteger(数値)をString(文字列)に、
「StrToInt」は「String」(文字列)をInteger(数値)に変える、
基本中の基本の型変換になります。次章で詳しく説明するかと思います。

この一連の作業を「デバッグ」と呼び、論理エラーや設計時エラーを修正していく作業になります。ではもう一回、細かくデバッグをしていきましょう。

2.3 ビジュアル設計ツールの使い方

2019年1月31日 木曜日

ビジュアル設計ツールの使い方~ツール紹介編~

ユーザーインターフェース

ユーザーインターフェースとはユーザー(アプリケーションを使う人)とアプリケーションとの対話の手段で、アプリケーションの目に見える表示要素と言えます。更にかみ砕いて書くと、ユーザーインターフェースとは「ユーザー(使う人)」との「インターフェース(接点又は接続部分)」であり、固い言い方をすると、「アプリケーションと人とを繋ぐ接続コネクタ」であると定義できます。
Delphiに例えるなら、画面真ん中にある「フォーム(ウインドウ)」がそれであり、エディット、リスト、ボタン等、限られた、しかし多くの要素(コンポーネント)の中からユーザーの使用目的に合致すると思われる要素を適切なサイズで、適切な場所に、適切な操作方法で、設置/設定する必要があります。そしてこれらの要素にはユーザーからの入力に応答し、他の要素に操作した結果、得た情報やメッセージ(これを値、又は返り値と呼びます)を表示させる事が出来ます。
ここで重要なことは、ユーザーが想像し得る適切な要素に値を渡す必要があるという事です。
例えば、これらが思いの外、時間が掛かったり、ユーザーが操作法を想像しにくかったり、手間暇のかかる操作だったとしましょう。一つの操作をする度に、5回の確認やマウス、キー操作を要すると仮定します。例えば、時間がないときに大急ぎで操作していたとしたら、ユーザーは何を思うでしょうか?答えは幾つか考えられます。そんな設計をした人が誰なのか、不条理な思いをしながら操作するか、あるいは直ぐに放り投げて、興味を失ってしまうかのどちらかと思われます。
操作する際の階層の深さや手数は3回迄、要素の配置には熟慮を重ねた上で、ルールを作ってグループ分けをしっかり定義して配置すべきでしょう。
以上が、ユーザーインターフェースを設計する上での、基本的で重要な考え方になります。

ビジュアル設計ツール

Delphiでは、ユーザーインターフェースを実際に動かした時と同じ状態で設計、作成する事が出来ます。
フォーム:実行時にウインドウとなり、アプリケーションの画面となる部分で、先ほど説明したユーザーインターフェースを設計し、作っていく土台となるものです。

ツールパレット(コンポーネントパレット):コンポーネントがグループ分けされて、パレットに収まっています。「検索」から、欲しいコンポーネント名を検索すると、全てのコンポーネントから検索して一覧を表示してくれます。検索したら、ダブルクリックか、ドラックアンドドロップで、フォーム上に配置していきます。

構造(オブジェクトツリー)
真ん中の画面が「デザイン」(フォーム)なら、コンポーネントの配置を「コード」なら、ソースコードのそれぞれのツリー構造(オブジェクト同士の上下関係)を表示します。

「デザイン」(フォームの場合)

「コード」(コードエディタ)の場合

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

オブジェクトインスペクタはDelphiでアプリケーションを開発する上で、決して欠く事の出来ない、非常に重要なツール、又はオブジェクトリポジトリです。
このオブジェクトインスペクタはフォーム(ウインドウ)やコンポーネント(要素)のプロパティ(設定)を変えたり、又は、それらのイベントハンドラを設定して作成し、開発する人(つまりあなた)に、コードを記述する場所をナビゲートしてくれます。もし、このツールが使えなくなったら、オブジェクト指向での開発は不可能ないし、酷く効率の悪いもの(全て、1から自分で書く必要に迫られます)になってしまうでしょう。非常に重要なツールですので、必ず使いこなせるように頑張りましょう!

オブジェクトインスペクタ:プロパティエディタタブ

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

ビジュアル設計ツールの使い方~実践編~

1. 先ず、プロジェクトマネージャで「Project1.exe」をアクティブプロジェクトに設定します。判らなくなったら、プロジェクトマネージャの説明まで戻りましょう。
2. 選択出来たら、「Project1.exe」のツリー構造を展開し、更に「Unit1.pas」のツリー構造を展開、「Unit1.dfm」をダブルクリックします。

3. 次に、真ん中の画面で下にある「コード/デザイン」を、「デザイン」が選択されていることを確認してください。されていなかったら、デザインをクリックして選択します。
4. ツールパレット(画面の右下側)から、「検索」から「Panel」と入力します。Panelコンポーネントが検索で引っかかるので、これを、配置します。
5. 「構造」(オブジェクトツリー)から、「Form1」をクリックし選択します

6. 4.の手順で、「Memo」をForm1に配置します。
7. 5.の手順で、「Panel1」をクリックして選択します。
8. 4.の手順で、「Button」を3つ、Panelに配置します。
9. 4.の手順で、「OpenDialog」、「SaveDialog」を、何処でもいいので配置します(これを非ビジュアルコンポーネントと呼びます。実行時は見えないのが特徴です)。
10. 5.の手順で、「Panel1」を選択します。
11. オブジェクトインスペクタのプロパティタブを選択し、検索から「Caption」と入力します。「Caption」プロパティが見つかるので、右隣りのテキスト編集領域から、「Panel1」という文字を削除します。この文字を「プロパティの値」と言い、ここを変えてあげることで、コンポーネントの設定を変える事が出来ます。

12. 今度は、11.の手順で、「Align」と入力し、テキスト領域をクリック、パネルの図がドロップダウンして表示されるので、一番上の細長いパネルをクリックします。そして、値が「alTop」に変わったことを確認します。

13. 「Panel1」に配置した「Button」コンポーネントを左詰めで、バランスよく、Panel1上に並べます。
14. 11.の手順で、「Button」コンポーネントの表示されている名称を変えていきます。左端から、「新規」、「開く」、「保存」と入力していきます。
15. 5.の手順で、「Memo1」を選択し、「Align」を12.の手順で真ん中のパネルの設定をし「alClient」に変わったことを確認し、検索から「Lines」を探して、テキスト入力エリア(プロパティエディタと呼びます)の「(TString)」をダブルクリック、メモがあるポップアップダイアログが表示されるので、「Memo1」という文字を消して「OK」を押します。

16. 以下の様に、フォームが設定される筈です。

17. Button「新規」、「開く」、「保存」の「イベントハンドラ」を、設定していきます。
18. 新規Buttonをクリックするか、5.の手順で選択します。
19. オブジェクトインスペクタのイベントタブをクリックし、検索から「OnClick」を探し、右の空白をダブルクリックし、イベントハンドラを作成します。
20.
21. コードエディタと呼ばれるウインドウが出現し、以下の文言(コード)がある筈です。
ソース2

Beginとendの間に、以下の命令文を貼り付けます。
ソース3

22.今度は、20.21.の手順で、「開く」、「保存」に、以下の命令文を貼り付けていきます。
「開く」Buttonのイベントハンドラ
ソース4

「保存」Buttonのイベントハンドラ
ソース5

全体を見ると、以下の様な形になる筈です。
ソース6

23. 以上で、一つ目のアプリケーションのコーディングが完了しました。
今度は実行してみましょう。ツールバーから、以下のボタンを探します。

このボタンを探して押します。

もし、何か間違いがあれば、以下の画面が表示されます。
エラーの箇所はダイアログの「OK」を押した後、赤線が引かれて表示されます。(今は、そういうものだと思ってください)ここでは、エラーは出ない筈なので、イベントハンドラの記述をよく見比べてください。

成功すると、以下の画面が表示され、アプリケーションが動きます。

24. 今度は「Project2.exe」をアクティブプロジェクトにして、こちらも全く同じものを制作してみてください。
フォームの画面やコンポーネントの種類や数が若干変わりますが、作り方もイベントハンドラの記述も全く同じです。


25. 出来上がったら、名前を付けて保存しましょう。

今回作ったものは次回の章でも使いますのでご注意ください。
この先の章で、VCL、Fire Monkey双方で特徴がはっきりと分かれ、コードの書き方や、コンポーネントの設定が両者で大きく変わっていきます。
次はコンパイル、デバッグ、実行についてになります。

(保存の仕方)メニューから、「ファイル」→「すべてを保存」か、ツールバーから、

この二つのアイコンのうち、右のアイコンをクリックします。
ここで注意が必要なのは、
「C:\Users\(ユーザ名) \Documents\Embarcadero\Studio\Projects」
に保存してしまわない事。ここに保存してしまうと、後でいろいろと厄介なことになります。この「C:\Users\(ユーザ名) \Documents\Embarcadero\Studio\Projects」というフォルダは、Delphiがプロジェクトを新規作成する際に使用するデフォルトのフォルダになります。ここに保存してしまうと、後から新規作成した際にDelphiが既にProjectがあるのを察して、例えば、今回作った(二つのエディタ)ものだと、グループ名は「ProjectGroup1」ではなく「ProjectGroup2」(既に「ProjectGroup1」が保存されている為、1は使えない)、
プロジェクト名も「Project1,Project2」が保存されているので、「Project3」からになり、
ユニット名も、二つ保存されているので、「Unit3」からになります。
そして、フォルダ階層も結構深いので、ここに保存してしまうと、「あれ、あのファイル何処行った??」、「この前編集したプロジェクトは、この中のフォルダのどれだっけ??」という事になりかねません。

↓デフォルトの初期フォルダにプロジェクトを保存してしまった例

以上の事を気を付けたうえで、今回は「デスクトップ」に「エディター」というフォルダを作成してそこに保存します。まずユニットから保存することになります。今回は標準の名前でもいいでしょう。敢えて名前を付けるなら「unit1」が「vcl_edit」、「unit2」が「FireMonkey_Edit」が妥当でしょう。

次はプロジェクトの保存になります。これは実行ファイル名になるので、慎重に名前を付けましょう。今回だと、ユニット名と同じ名前で良いでしょう。但し、一つのプロジェクト(グループではなく)に複数のユニットがある場合はユニット名と名前を重ねてしまうと、命名管理に支障をきたす(何が何だか、名前の意味が分からなくなりかねない)ので、プロジェクト名にアプリの名前(日本語は避ける事)、ユニット名に、ユニット(フォーム)の機能名あるいは何をするユニット化を分り易く命名した方がいいでしょう。

2.2 ビジュアル設計ツールの基本

2019年1月31日 木曜日

ビジュアル設計ツールの基本

オブジェクトリポジトリの使い方の実践

ここからは、VCL、Fire Monkeyの二つを使います。全く同じ簡単なメモ帳アプリケーションを作りながら、オブジェクトリポジトリの使い方を実践的に学んでいきます。途中、コードの打ち込み作業もありますが、今は何も考えずにコピーアンドペーストして、指示通りの箇所に貼り付けていってください。
そして、この章で取り扱う事は、Delphiを扱ううえで、必要最低限の基本的なことです。そしてここを理解できないと、この先の章で間違いなく躓きます(交通規則への理解や車の運転免許証を持っていても、車の操作方法が判らないと、何もできないのと同じです)。
Delphiの操作方法が判らなかったら2章を、プログラミング(命令文の書き方)が判らなかったら3章を、
繰り返し読んでみて頑張りましょう。
初めて触る、慣れない道具を使うというのは、本人にしか判らない苦痛かと思いますが、めげずに頑張っていきましょう。頑張れば、半年から1年後、楽しみながらDelphiを使いこなすあなたが、そこにいる筈です!

プロジェクトの新規作成

メニューから、「ファイル」→「プロジェクト」→新規作成→「その他」を選択します。するとダイアログウインドウが現れます。これを「オブジェクトリポジトリダイアログ」と呼びます。そこから「VCLフォームアプリケーション」を選択します。

プロジェクトマネージャ

Delphiの画面右上に、「プロジェクトマネージャ」と表示されている枠がある筈です。無い、又は表示を間違って外してしまったならば、メニューから、「表示」→「ツールウインドウ」→「プロジェクトマネージャ」を選択すると、表示されます。この枠(又はウインドウ)を「プロジェクトマネージャ」と呼び、プロジェクト(これから作るアプリケーション)を管理したり、切り替えたり、呼び出したりと、頻繁に使う機能の一つです。是非とも覚えておきましょう。

プロジェクトの追加(新規作成)

「プロジェクトマネージャ」の「ツールバー」から、フォルダアイコンに+マークが付いたアイコンにマウスカーソルを合わせます。

1秒程待つと、「新規プロジェクトの追加」というポップアップヘルプが表示されますので、そのボタンを押します。すると、先ほど新規作成で表示された、「オブジェクトリポジトリダイアログ」が表示されます。そこから、「マルチデバイスアプリケーション」をダブルクリックするか、選択して「OK」を押します。すると、「プロジェクトマネージャ」に、「Project2.exe」という、新しいプロジェクトが表示されたはずです。

アクティブプロジェクト

アクティブプロジェクトとは、現在編集中(編集が有効になっている)のプロジェクトの事を指します。更にかみ砕くと、現在作業中(現在編集作業中)のプロジェクトの事を指します。
アクティブプロジェクトを調べるには、
プロジェクトマネージャのタイトルバーを見ます。
左詰めで、プロジェクト名が表示されているはずです。

又は、プロジェクトマネージャ内のプロジェクト名を見、
太字ならばアクティブプロジェクト、
細字ならば、非アクティブプロジェクト、
と判別する事が出来ます。

全体を見渡すとこんな感じ。アクティブプロジェクトを切り替えたい場合はこの場合の例で言うと、「ProjectGroup1」直下の「Project1.exe」又は「Project2.exe」をダブルクリックするか、それを右クリックし、右クリックメニューを出して、「アクティブ化」を押します。

2.1 Delphiアプリケーション作成についての基礎知識

2019年1月31日 木曜日

作る事が出来るアプリケーションの種類

Delphiを起動

メニューから、「ファイル」→「新規作成」→「その他」を選びます。
以下の画面が表示されます。以下の種類のアプリケーションを作成できます。

Androidサービス

Windowsで言うところの「常駐アプリ」の様なものです。見た目(ユーザーインターフェース又は画面)が無く、ずっと実行され続ける(バックグラウンドで動くとも言います)性質のアプリです。それを作る事が出来ます。画像はAndroid Serviceを新規作成した時の画面。見た目が無いので、フォームも当然表示されません。

Fire Monkey Metropolis UIアプリケーション

Fire Monkeyコンポーネントを使って、Windows8の見た目や動きにそっくりなアプリケーションを作る(Windows8のルックアンドフィールに準拠している、とも言います)事が出来ます。この機能の面白い点として、Windows8以外のWindowsであっても、Windows8の見た目になります。

VCL Metropolis UIアプリケーション

Delphiの伝統的なVCLコンポーネントを使って、Windows8の見た目や動きにそっくりなアプリケーションを作る事が出来ます。(Windows8のルックアンドフィールに準拠している、とも言います)
この機能の面白い点として、Windows8以外のWindowsであっても、Windows8の見た目になります。

VCLフォームアプリケーション

Delphiの伝統的なアプリケーションを作る手法。VCLとはVisual Component Libraryの略。初代Delphiから脈々と続く手法であるため、過去に発売されたDelphiの書籍やインターネット上の過去の資産を活用しやすいのが特徴。但し、このVCLは初代から現在のバージョンに至るまで、様々な改良や修正が加えられているので、過去のバージョンがそのまま直ぐに動くとは限りません。(余談ではありますが、これは他の言語にも言える事で、Delphiに限った事ではなく、セキュリティ上の対策や、機能向上の為に変更や改良、廃止があることは、珍しいことではありません)

MDIアプリケーション

論より証拠で、見た方が理解は早いと思います。下の画面を見てください。背景はDelphi、前面はMDIアプリケーションを新規作成して、実行したところです。因みに、一行も書いていないし、何の設定もいじっていません。でもこれだけの事が出来ます。この画面まで、まっさらなフォームからも作れますが、時間は当然消費するし、最初からあるのなら、当たり前ですが使った方がいいです。但し、勉強の為なら、このまっさらのMDIを調べて、自分で再現してみると、初歩のうちは大変勉強になります。

SDIアプリケーション

これも論より証拠で、見た方が理解は早いと思います。同じく下の画面を見てください。最初から、コンポーネントが配置してあり、お膳立てがされてあります。MDIの時程至れり尽くせりではないですが、この後やることは、フォームを新規に追加して、フォームを呼び出す処理を書いてあげるだけでいいのです。最初は、SDIから入るのは難しいかもしれないでしょう。しっかりお膳立てされたMDIをマスターして、そのMDIを再現できるようになり、意味も理解出来たら、SDIに進むといいでしょう。そうすれば、お膳立ての効いたDelphiの良さが判る様になると思います。

コンソールアプリケーション

下の画面を説明していきます。
以下のプログラムの文(命令文)を書きました。
そして実行したのが、下記の画面です。真っ黒い画面に、「Hello, World!」と表示されていると思います。
これがコンソールアプリケーションというものです。このコンソールアプリケーションには、特に意識してコードを書かない限り、オブジェクト指向ではなく、それ以前の時代の書き方になります。つまり、上から始まって、下に流れ、一番最後の命令文が終わると、有無を言わさず、アプリケーションは終了してしまいます。
この例でいうと、「sleep(50000);」が実行され、50000マイクロ秒経過したら、アプリケーションは終了してしまいます。
それがコンソールアプリケーションが持つ、他のアプリケーションとの最大の違いであり、特徴です。
ソース1

コントロールパネルアプリケーション

これはちょっと特殊かもしれません。平たく書くと、コントロールパネルの機能を作ります。初心者向けでは確実にないです。画面はコントロールパネルアプリケーションの初期状態のコードエディタの画面です。

サービスアプリケーション

バックグラウンドで(常駐して継続的に)実行されるアプリケーションを作成します。

ダイナミックリンクライブラリ

ダイナミックリンクライブラリ(DLL)を作ります。これ単体は実行可能アプリケーションではなく、拡張子も.dllになります。「ダイナミック」に、アプリケーションに「リンク」する「ライブラリ」と考えると分り易いかも。その名の通りです。アプリケーションの機能を拡張出来るライブラリを作れます。

パッケージ

コンポーネントをパッケージにします。作るよりも、恐らく使う事の方が多いかもしれません。今はそういう機能もある、といった程度に捉えて置くだけでいいかと思います。コントールパネルアプリケーション、サービスアプリケーション、ダイナミックリンクライブラリ、パッケージ、が作れるようになったら、立派な上級者の仲間入りでしょう。

マルチデバイスアプリケーション

これこそが、例のFire Monkeyです。

ある意味、XE2以降のDelphiの最大の売りといっても過言ではないでしょう。個人的意見で恐縮ではありますが、プライベートで使うならば、使わなければ損!と思っております。その最大の売りは、ユニークで個性的なコンポーネント群と美しくそして非常に強力な描画機能を持っている点でしょう。

Fire Monkeyの特筆すべき点はマルチデバイス対応もさることながら、「Shapes」グループ等に属する、風変わりで、そして強力なコンポーネント達です。Fire Monkeyは、VCLとは全く異なるアーキテクチャの様です。その顕著な証明として、2Dグラフィックスアプリケーションを、いとも簡単に作れてしまう事です。それもコーディング作業、つまりコードを殆ど書く事もなく(!)。これは驚異的なことであると考えております。Delphiは、C++と同列に分類できる、ネイティブコンパイラ(ソースコードをアプリケーションに変換すると、コンピュータが理解し易い機械語に翻訳され、高速に動作する仕組みのアプリの事)です。そして統合開発環境でもあり、潤沢な機能とコンポーネントを搭載しています。そこに非常に高機能な2Dや3Dの開発機能が(しかも標準で)備わっているのです。

1.5 Delphi開発の手法

2019年1月31日 木曜日

Delphi開発の手法

Delphiでは、コードの記述とビジュアルプログラミングと呼ばれる手法を組み合わせて開発を行います。

ビジュアルプログラミングとは?

➀ボタンやテキスト等のコンポーネントをマウス操作によってフォームに配置してプログラムを作成する手法。

➁最初からプログラムの流れを記述していくのではなく、ユーザーのインターフェースを設計し、それを構成するコンポーネントに行われた操作に対して、どの様な処理を実行するのか定義していく。基本的にはコーディングが必要になるのは、イベントが発生した時に呼び出される。イベントハンドラへの処理を記述するだけとなる。

Delphi開発の手順

Delphiでの開発手法を纏めると、次の様になる。
1.プロジェクトの作成
2.コンポーネントをフォームに配置
3.プロパティの設定
4.必要なイベントハンドラのコーディング
5.プロジェクトのコンパイル
6.記述ミスがあれば修正→5.
7.プログラムの実行、テスト
8.プログラムの修正→5.
9.完成

1.4 Dlephiプロジェクトの概要

2019年1月31日 木曜日

Delphiプロジェクトについて

プロジェクト

Delphiの開発はプロジェクト単位で進めていく形になっています。
プロジェクトとは一つのプログラムの開発に必要な複数の要素を管理する単位で、一つのプロジェクトが一つのプログラムとなります。

プロジェクトグループ

その名の通り、プロジェクトが複数集まったものです。
例:
「受注管理」→
「仕入管理」→ 「販売管理システム」
「在庫管理」→

Dlephiプロジェクトのファイルの種類

Delphiプロジェクトファイルの構成は以下になります。

「プロジェクト名.dprproj」及び「プロジェクト名.dpr」

Delphiで開発するアプリのプロジェクトです。(このファイルを開いてアプリを開発します)
「プロジェクト名」はそのままアプリの名前になります。慎重に命名しましょう。

「ユニット名.dfm(又は.fmx)」及び「ユニット名.pas」

この二つのファイルは対になっていると考えた方が良いでしょう。「.dfm(又は.fmx)」はフォーム(ウインドウ画面)を、「.pas」はそこに記述したソースコードが収まっています。
また、フォームを持たないユニット(ウインドウ画面の無い)を新規に追加した場合、「.dfm」ファイルは生成されず、「.pas」だけが生成されます。
【備考】「.dfm」VCLアプリケーションを開発した時のフォーム情報を格納したファイル。
    「.fmx」FireMonkeyアプリケーションを開発した時のフォーム情報を格納したファイル。

「ユニット名.dcu」

コンパイル済みユニットファイル。

「プロジェクト名.res」

リソースファイル。

「プロジェクト名.local」

ユーザ固有プロジェクトオプションファイル。プロジェクトオプションの情報を格納したファイル。

「プロジェクト名.exe」

Delphi構築し生成されたアプリケーションです。
「\Win32\debug\」ビルド時や実行時、デバッグ時に生成され、フォルダに格納されます。

Delphi開発の要素

デフォルトプロジェクトの場合、下記の様にファイルが作成され、それぞれ名前が付けられています。

「プロジェクト名.dproj」

プロジェクトファイル(新)。中身はXML。

「プロジェクト名.dpr」

プロジェクトファイル(旧)。プロジェクトの管理及び、プロジェクトのメインプログラムになります。

「プロジェクト名.res」

リソースファイル。

「ユニット名.dfm(又は.fmx)」

フォームのプロパティ等の情報が詰まったファイル。

1.2 Delphi Community Editionのインストール方法

2019年1月31日 木曜日

導入(ダウンロード、インストール)

先ずは、Delphi Community Editionのインストーラをダウンロードします。
ブラウザを開き、「Delphi Community Edition」と入力し検索します。
URLは以下になります。
https://www.embarcadero.com/jp/products/delphi/starter

「Delphi Community Edition」のダウンロードページ

初めて登録する場合、以下の情報を入力する必要があります。

名前
メールアドレス
パスワード
会社名
電話番号

一度、アカウントを登録した事がある場合は、「エンバカデロ製品のユーザーである場合には、こちらからログインしてください」を選択します、
下記の画面から、
登録ID(メールアドレス)
パスワード

を入力します。

「私はロボットではありません」を押すと、画像が出て生きて質問をしてくるので、
その質問に答えます。
正解出来たならば、「今すぐダウンロード」を押します。

ダウンロードが完了したら、ダウンロードフォルダを開くか、ブラウザ上からダウンロードアイコンダブルクリックして、インストーラーを起動させます。

インストーラーの初期画面
「使用許諾契約書」と「プライバシーに関する声明」を読んだら、「同意する」を押して次に進みます。

※インストール時の注意事項※

必ず、「製品のシリアルナンバーを既に入手している」を押します。
トライアル版を選択してしまうと、コミュニティエディションではなく、トライアル版がインストールされてしまいます。間違えた場合は、一旦アンインストールして、もう一度、インストールし直しましょう。

Community Editionの場合、シリアルナンバーだけの入力で大丈夫です。
なお、シリアルナンバーが記されたメールが、エンバカデロから届いているので、
それを開いてシリアルナンバーを取得します。

なお、再インストールの場合、3回インストールを行うと、登録回数の上限に達してしまう。
これは、不正コピー防止の為のライセンス保護の為にそのような制約があるようです。
上限に達したら、エンバカデロのサポートページから、上限更新を申請すれば、
翌営業日には登録回数が回復し、登録する事が出来ます。

再インストールする際、使用許諾ライセンスの更新は以下のページになります。
https://supportforms.embarcadero.com/

因みに、Delphi Community Editionは、他のどのバージョン(のプロフェッショナル版以上)とも、共存する事が出来ない。

競合している場合は、製品版とそのライセンス情報を消してからインストールするか、Community Editionを諦めるかのどちらかしか選択肢がありません。

その場合は(Community Editionをインストールする場合)、インストール完了後、以下のファイルを立ち上げ(64Bit版の場合)
「C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\LicenseManager.exe」
※32Bit版だと以下
「C:\Program Files\Embarcadero\Studio\19.0\bin\LicenseManager.exe」

を実行し、ライセンスマネージャを立ち上げ、登録されたライセンスを消してから、Community Edition認証を行います。

以上で、インストールは終了です。

1.3 Delphiの起動と終了

2019年1月31日 木曜日

Delphiの起動と終了

Delphiを起動するにはスタートメニューから、「Embarcadero RAD Studio 10.2」→「Delphi 10.2」を
選択します。Windows7であればスタートメニューの検索ボックスから、Windows10であればColtanaから
「Delphi」と入力してEnterを押します。そうするとDelphiが起動する筈です。

初期起動画面ではテーマを選択できます。最近の流れでTokyoから、目に優しいとされるダーク調の外観が採用され、選択する事が出来る様になりました。これは後から変更する事も出来ます。
ツール→オプション→テーママネージャからライトかダークを選択する事が出来、カスタムで独自の設定も出来ます。

終了する場合は、タスクバーの×ボタンをクリックするか、ファイルメニューの「終了」をクリックします。プロジェクトを編集中だった場合、保存するかを聞いてくるので保存する必要があれば(何か作品を作っている途中であれば)、「はい」をクリックし、ファイル名を付けて保存します。既に一度保存されていれば上書き保存されます。

「ダーク」テーマを設定したところ

「ライト」テーマを設定したところ


Delphi統合開発環境

Delphiは統合開発環境(IDE)と呼ばれる膨大で潤沢な機能を惜しみなく詰め込んだ高機能な開発環境です。その機能の多くは、初めて触られる方や他の開発環境から移行した方には、余りに膨大だったり機能が全く異なったりで戸惑う事でしょう。しかし、Delphiに限らずEclipseやVisual Studio、その他のIDEを使い込んでいても、はじめからその全てを使いこなせる人は、そうそういないでしょう。問題は、如何に慣れ、如何に覚えるかです。

「ファイル」メニュー:

  プロジェクトやユニットの作成、追加、保存、終了等に使います。

「編集」メニュー:

  フォーム上のコンポーネントや、ソースコードの編集作業時に使います。

「検索」:

  ソースコードやファイルの検索の際に使います。

「表示」:

  IDEの機能の表示/非表示を操作する時に使います。

「リファクタリング」:

  リファクタリングに関する操作を行うときに使います。

「プロジェクト」:

  プロジェクトの操作(プロジェクトへの追加/削除、コンパイル、ビルド等)の際に使います。

「実行」:

  プロジェクトの実行やデバッグ、デバッグ操作の時に使います。

「コンポーネント」:

  コンポーネントの作成や追加、インポート(機能の取込)等に使います。

「ツール」:

  IDEの機能を操作する時に使います。

「ウインドウ」:

  レイアウトが「クラシックレイアウト」の時に、ウインドウを操作します。

「ヘルプ」:

  ヘルプとライセンス管理、バージョン情報について表示します。


ツールパレット

ツールパレットには沢山のコンポーネントが登録されています。機能別に登録されており、コンポーネントをダブルクリックするか、ドラッグアンドドロップをしてフォームの任意の場所に配置し、外観を作っていきます。

ツールバー(スピードバー)

ツールバーには、メニューにある、頻繁に使用する機能が登録されています。
ツールバーのアイコンの上にマウスカーソルを移すと、簡単なツールチップヘルプが表示されます。

フォーム

アプリケーションを作成する上で土台となるフォーム(ウィンドウ)です。このフォーム上にコンポーネントを配置して、外観を設計していきます。このフォームと呼ばれるウインドウは、通常のウインドウと同じく、マウス操作でサイズを変更出来ます。また、フォームのプロパティを変更する事でダイアログ等のウインドウに変える事も出来ます。プロジェクトの新規作成時は、一つのまっさらなフォームが表示されます。フォームは、任意でプロジェクトに追加していくことが出来ます。なお、フォームは上部のタブをクリックして切り替える事が出来ます。

コードエディタ

プログラムのコードを記述するウインドウ。イベントハンドラと呼ばれる動作に対するイベントを作成(フォームやコンポーネントのダブルクリック、オブジェクトインスペクタと呼ばれるIDEの機能からの操作で作成できます)することで、自動的にコードエディタ(コードが表示されるウインドウ)が前面に表示される。フォーム同様、上部のタブをクリックして、ページ(ユニット)を切り替える事が出来る。ページ(ユニット)とウインドウ(フォーム)の切り替えは、IDE下部真ん中の「コード」/「デザイン」をクリックする事で、切り替える事が出来ます。

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

コンポーネントやフォームのプロパティの設定、イベントハンドラの作成を行うウインドウ。
プロパティはコンポーネントの各プロパティにより、Bool(TrueかFalse)、文字列(String)や文章(List)、数値等、様々なタイプがある。入力方法は、そのタイプによって自動的に変化し、選択したり、入力したりと、プロパティによって変わってくる。


1.1 Delphi概要

2018年12月9日 日曜日

Delphiとは、Windows、Mac OS、(又はMac OS X)、iOS、Android向けのアプリケーションを開発出来る統合開発環境(IDE)です。この統合開発環境(IDE)は別名RAD(「Rapid Application Development」の略)と呼ばれており、ウサギのように素早くアプリケーションを作成するとの意味が込められています。

その開発手法は、先ず、フォームと呼ばれるウインドウにボタンやリストボックス、エディタにメモ等(Delphiではこれらをコンポーネントと総称しています)を配置し、ビジュアルに画面を設計します。設定もコンポーネントのプロパティをビジュアルに設定します。画面の設計が終わったら、コンポーネントのイベントハンドラ(ボタンを押した、エディタにキー入力がされた、リストボックスの値が変更された、などを感知する箇所)に記述し、ソースコードを書くといった開発手法になります。

当然ですが、ビジュアルな開発だけではなくソースコードからコンポーネントを動的に生成したり、プロパティ(設定)を実行時に変更するように記述する事も出来ます。

因みに、Delphiの歴史は浅い様で深く、Delphiと言う名称で登場したのは今から20年近く前の事になります。1995年、Windows3.1(Windows95の前身。DOSとWindowsの組み合わせから成るハイブリット型OSだった)用として、「Delphi For Windows」としてデビューしたのを皮切りに、今に至るまで紆余曲折を経ながら進化を続けています。

当時、Windows用開発環境としては、安易に開発出来るがパフォーマンスに劣るVB(Visual Basic)か、パフォーマンスに勝るが難解なC++か、実質二者択一の選択肢しかありませんでした。そこにDelphiは、VBの様に安易に開発が可能で、その上、C++の様にパフォーマンスに優れ且つ当時最先端だったオブジェクト指向を先駆けて搭載した言語仕様として登場しました。

Delphiは、2WayToolと呼ばれる機能やVCLと呼ばれるコンポーネント群を有しています。VCLはホワイトボックス化している為、そのソースコードを追い掛ける事が可能です。
(当時、例えばVBではコンポーネントはC++で開発されており、しかもブラックボックスなのでコンポーネントのソースコードを見る事は出来なかった。)

その為、Delphiは大変な衝撃をもってエンジニアに受け入れられ、2000年前後迄、爆発的にヒットしました。

現在のDelphiは、当時から脈々と続くVCLは勿論、ヴァージョンXE2から始まった、Fire Monkeyと呼ばれるフレームワークも搭載され、Windowsの枠を超えた開発が可能になりました。具体的には、インタプリタではなくネイティプコンパイラでクロスプラットフォームでの開発を実現した為、Mac OSやAndroid、及びiOSにも対応が可能です。また、Delphi Community Editionは無償版とはいえ、コンポーネントも豊富で、搭載された機能も潤沢である為、無償版だからと言って困る事はないでしょう。