Delphiの開発の進め方(入門)

#はじめに
この記事はWIndowsアプリケーションをDelphiで作成する際の基本的な進め方を説明する

#進め方目次

1. [プロジェクトとユニットを作成](##プロジェクトとユニットを作成)
2. [ビジュアルプログラミング](##ビジュアルプログラミング)
3. [コードの記述](##コードの記述)
4. [コンパイル](##コンパイル)

##プロジェクトとユニットを作成
####プロジェクトとユニットについて
プロジェクトとユニットの関係性は以下のように、各ユニットをプロジェクトでまとめている

>プロジェクト
>　　├ ユニット1
>　　├ ユニット2
>　　├ ユニット3

プロジェクトはアプリケーションやシステムのことを指し、ユニットはそのプロジェクトを機能別、役割別に分けているものである。
そのため、それぞれのファイル名は以下にするとよい

|ファイル|ファイル名|
| ---- | ---- |
|プロジェクト|作成したいアプリケーションを表す名前|
|ユニット|アプリケーション内での役割や機能を表す名前|

####作成方法

「ファイル」＞「新規作成」を選択し、該当するメニューを選択する

|作成するファイル|選択するメニュー|
| ---- | ---- |
|プロジェクト|Windows VCL アプリケーション - Delphi|
|ユニット(フォームあり)|VCL フォーム - Delphi|
|ユニット(フォームなし)|ユニット - Delphi|

※ プロジェクトを作成した際は自動的にユニット(フォーム)も作成する

その他のメニューの種類と説明については以下
参考：[［新規作成］（［ファイル］メニュー）](http://docwiki.embarcadero.com/RADStudio/Sydney/ja/%EF%BC%BB%E6%96%B0%E8%A6%8F%E4%BD%9C%E6%88%90%EF%BC%BD%EF%BC%88%EF%BC%BB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%EF%BC%BD%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%EF%BC%89)

##ビジュアルプログラミング
Delphiの開発は「ビジュアルプログラミング」と「コードの記述」と2つの方法で開発していく。
ビジュアルプログラミングとはマウスでコンポーネントという部品をフォームにドラッグ＆ドロップしてアプリ画面を作成する
前提として、フォーム付きのユニットに対して行う

####フォーム画面とコード画面の切替
`F12`を押すと画面が切り替わる

フォーム画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/330dab4c-6878-c400-b6ea-3ccbc22b2c3f.png)
コード画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/6fad8ca4-945b-f8ab-ee05-a77bd6fcdddf.png)

####フォームのプロパティ設定
`F11`を押してオブジェクトインスペクタを表示する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/217a4284-70db-452b-849c-b648bec5686c.png)



####コンポーネントの配置
フォーム画面の状態で`Ctrl + Alt + P`を押してパレットを表示する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/159081d4-0dac-be59-ad53-10252b560f41.png)

ここでは例として`TButton`を配置する

`Standard`を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/2938799d-51d6-33fc-aa50-ffafee738129.png)

`TButton`を押して、フォームにドラッグ&ドロップする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/cd64c8b6-10d2-1c33-7f01-79798be18b32.png)

####プロパティの設定
オブジェクトインスペクタで以下の`Caption`を変更する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/f47bb764-229c-b32d-3cc5-796c76921847.png)

フォームに置かれたボタンの文字が変更される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/974f0979-e242-5afa-3398-77562b414c18.png)

その他のプロパティについてはHELPを参照する
※HELPはF1で表示される

##コードの記述
上記のビジュアルプログラミングを実施後にコード画面を開くと以下のコードが記載されている

```Delphi:test.pas
unit test;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.
```
ここでは例として、「実行ボタンを押したらメッセージが表示される」コードを記述する。

####イベントとは
まず、「ボタンを押したとき」に何かをしなければならないことをDelphiに教えなければならない。
これをイベントという。
他には、「フォームを消したとき」「キーボードが押されたとき」などがある

####イベントの設定
オブジェクトインスペクタから`TButton`を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/79950df6-00a2-6ff3-48e1-6d56c30f5660.png)

イベントを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/d3353663-5078-e82f-6656-7445e98630eb.png)

今回は「ボタンを押したとき」なので`OnClick`の設定値の入力箇所をダブルクリックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/03d3afb6-00cc-726d-5242-1db23f7c746c.png)

`Button1Click`というイベントが設定された
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/3291493d-1ff2-f50d-ae02-9c1800e8c833.png)

コード画面にも追加されている]

```Delphi
procedure TForm1.Button1Click(Sender: TObject);
begin
//ここに処理を記載する
end;
```
####処理内容を記載
追加されたコードの枠に処理内容(メッセージを表示する)を記載する

```Delphi:test.pas
unit test;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;                         //コンポーネントの配置時自動入力
    procedure Button1Click(Sender: TObject);  //イベント設定時自動入力
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('実行ボタンが押されました')
end;

end.
```

##コンパイル
`F9`を押すとコンパイルが実行され、アプリケーションが表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/3386ba85-387d-2071-57ba-ed16d67278a7.png)

実行ボタンを押すとメッセージが表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037774/3ffd2fc0-25d8-0bb9-3f66-c114fc83c418.png)


右上の「×」ボタンでプログラムが終了する
※`Ctrl + F2`で強制終了させる事も可能(メモリの破棄等が行われないので注意)