Delphi 1～4 でコンソールアプリケーションを作る

# はじめに

何を今更な話です。

# コンソールアプリケーションについて

正確には **Win32 コンソールアプリケーション** の事です。**Delphi** の殆どのバージョンでは、コンソールアプリケーションを 

 - [ファイル | 新規作成 | アプリケーション] で開くアプリケーションウィザード
 - [ファイル | 新規作成 | コンソールアプリケーション]

いずれかから作れるのですが、コンソールアプリケーション用のウィザードが実装されたのは **Delphi 5** からとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c13966b2-cdc7-a3ed-ead6-4798bcdd88b1.png)
**Delphi 5**よりも前のバージョンでもコンソールアプリケーションは作れたのですが、IDE から作ろうとするとちょっと面倒な手順を踏む必要がありました。

## ■ Delphi 1
**Delphi 1** ではコンソールアプリケーションは作れませんし、MS-DOS アプリケーションも作れないのですが、**CRT アプリケーション**という疑似コンソールアプリケーションが作れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/aa2650ea-bd9b-715e-3b64-c8a8d9d74a52.png)

### 簡単なやり方
[オプション | 環境...] でオプションダイアログを開き、[ギャラリー] の `プロジェクトの新規作成で表示` にチェックを入れておくと、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/dbde4bcb-d92d-81dc-0876-58bbba43155e.png)
[ファイル | 新規作成] で CRT アプリケーションを作れるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/4a7ab213-47d8-d132-14c3-df7bd59df682.png)

### 面倒なやり方

 1. 新規にプロジェクトを作成します。
 2. [表示 | プロジェクトマネージャ] でプロジェクトマネージャを表示します。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/cbefafd5-dba2-abfa-923c-3a251beba92d.png)
 3. ユニット (画像では Unit1) を選択し、[削除] ボタンを押します。保存を聞かれますが [いいえ] を押します。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/147c581d-98d6-d046-5359-ab23306134ed.png)
 4. [表示 | プロジェクトソース] を開きます。

開いたプロジェクトソースは次のようになっているので、

```pascal
program Project1;

uses
  Forms;

{$R *.RES}

begin
  Application.Run;
end.
``` 
となっているのを

```pascal
program Project1;

uses
  WinCRT;

begin

end.
``` 
と書き換えます。これで CRT アプリケーションが作れるようになります。

**See also:**

 - [Delphi で Pascal-S をコンパイルする (16bit 版 Delphi)](https://qiita.com/ht_deko/items/7b8db26fb7ce91542dd9)
 - [Delphi 1.0 Client/Server が無償公開されたので Windows 7 の XP Mode にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/e02a7b42ef65baa5d175)
 - [<3> Macintosh 用 Pascal のオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) (Qiita)](https://qiita.com/ht_deko/items/cd245180363e1911afa7)
 - [Macintosh Programmer's Workshop (MPW) Object Pascal の簡単な使い方 (Qiita)](https://qiita.com/ht_deko/items/de6838acd1d22722b674)

## ■ Delphi 2

ウィザードではコンソールアプリケーションを作れません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/7b64d26c-6329-d865-ea9a-6d63997ccf62.png)

### 簡単なやり方

次のファイルを `Project1.dpr` という名前で好きな場所にコピーします。

```pascal:Project1.dpr
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  SysUtils;

begin

end.
```

[ファイル | 開く] で上記ファイルを開きます。

### 面倒なやり方

 1. [ファイル | 新規作成] でアプリケーションを選択します。
 2. [プロジェクト | プロジェクトから削除...] で Unit1 を削除します。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8e47674b-085a-c47a-7881-dc2d0894f125.png)
 3. 保存を聞かれますが [いいえ] を押します。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8c823389-35a6-f177-e89d-d8593feaa038.png)
 4. [表示 | プロジェクトソース] を開きます。

開いたプロジェクトファイルを次のように書き換えます。

```pascal:Project1.dpr
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  SysUtils;

begin

end.
```

### 共通

 [プロジェクト | オプション...] で [リンカ] タブの `コンソールアプリケーションの作成` にチェックを入れておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/87cf0b8f-553f-09dd-d058-36e173181e16.png)
**uses** 句に `SysUtils` を追加してあります。実際には **uses** 句がなくてもコンソールアプリケーションとして成立するのですが、別名保存しようとした際や、開き直した時にエラーが発生してしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/a7201ec3-ae5a-df4f-ed51-ee221fd599e7.png)


## ■ Delphi 3

ウィザードではコンソールアプリケーションを作れません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/aa2b2a44-854f-458b-f9e4-40b0081965bc.png)

### 簡単なやり方
次のファイルを `Project1.dpr` という名前で好きな場所にコピーします。

```pascal:Project1.dpr
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  SysUtils;

begin

end.
```

[ファイル | 開く] で上記ファイルを開きます。


### 面倒なやり方
 1. [ファイル | 新規作成] でアプリケーションを選択します。
 2. [プロジェクト | プロジェクトから削除...] で Unit1 を削除します。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8e47674b-085a-c47a-7881-dc2d0894f125.png)
 3. 保存を聞かれますが [いいえ] を押します。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8c823389-35a6-f177-e89d-d8593feaa038.png)
 4. [表示 | プロジェクトソース] を開きます。

開いたプロジェクトファイルを次のように書き換えます。

```pascal:Project1.dpr
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  SysUtils;

begin

end.
```

### 共通
 [プロジェクト | オプション...] で [リンカ] タブの `コンソールアプリケーションの作成` にチェックを入れておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8a67c1c3-7d51-1380-75cd-911e68e608a6.png)
**uses** 句に `SysUtils` を追加してあります。実際には **uses** 句がなくてもコンソールアプリケーションとして成立するのですが、別名保存しようとした際や、開き直した時にエラーが発生してしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/a7201ec3-ae5a-df4f-ed51-ee221fd599e7.png)


## ■ Delphi 4

ウィザードではコンソールアプリケーションを作れません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/9f03feeb-2368-72d5-3eec-e1ee993c7174.png)

### 簡単なやり方
次のファイルを `Project1.dpr` という名前で好きな場所にコピーします。

```pascal:Project1.dpr
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  SysUtils;

begin

end.
```

[ファイル | 開く] で上記ファイルを開きます。


### 面倒なやり方
 1. [ファイル | 新規作成] でアプリケーションを選択します。
 2. [プロジェクト | プロジェクトから削除...] で Unit1 を削除します。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8e47674b-085a-c47a-7881-dc2d0894f125.png)
 3. 保存を聞かれますが [いいえ] を押します。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8c823389-35a6-f177-e89d-d8593feaa038.png)
 4. [プロジェクト | ソース表示] でプロジェクトファイルを開きます。プロジェクトマネージャの `Project1.exe` の部分を右クリックし [ソース表示] を選んで開く事もできます。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/afc8d885-fd34-0538-1366-a5d2b04586b8.png)


開いたプロジェクトファイルを次のように書き換えます。

```pascal:Project1.dpr
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  SysUtils;

begin

end.
```


### 共通
 [プロジェクト | オプション...] で [リンカ] タブの `コンソールアプリケーション` にチェックを入れておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/e126bf0a-f97f-02cf-3356-20e6d40e1810.png)
**uses** 句に `SysUtils` を追加してありますが、 **uses** 句がなくてもコンソールアプリケーションとして成立します。


## コンソールアプリケーションに関連するルーチン

コンソール入出力ルーチンです。

| ルーチン | 名前空間 | 説明 |
|:---|:---|:---|
| [Read()](http://docwiki.embarcadero.com/Libraries/Sydney/ja/System.Read) | [System](http://docwiki.embarcadero.com/Libraries/Sydney/ja/System) | ファイルからデータを読み込みます。 |
| [Readln()](http://docwiki.embarcadero.com/Libraries/Sydney/ja/System/Readln) | [System](http://docwiki.embarcadero.com/Libraries/Sydney/ja/System) | ファイルからテキストを 1 行読み込みます。 |
| [Write()](http://docwiki.embarcadero.com/Libraries/Sydney/ja/System.Write) | [System](http://docwiki.embarcadero.com/Libraries/Sydney/ja/System) | ファイルにデータを書き込みます。  |
| [Writeln()](http://docwiki.embarcadero.com/Libraries/Sydney/ja/System/Writeln) | [System](http://docwiki.embarcadero.com/Libraries/Sydney/ja/System) | ファイルにデータを書き出し、行末マーカーを追加します。 |

 - Read() / Readln() はファイル変数を省略した場合、グローバル変数 [Input](http://docwiki.embarcadero.com/Libraries/ja/System.Input) が使用され、プロセス標準入力ファイルにアクセスします。
 - Write() / Writeln() はファイル変数を省略した場合、グローバル変数  [Output](http://docwiki.embarcadero.com/Libraries/ja/System.Output) が使用され、プロセス標準出力ファイルにアクセスします。

**See also:**

 - [<12> テキストファイルの入出力 (標準 Pascal 範囲内での Delphi 入門) (Qiita)](https://qiita.com/ht_deko/items/391d6c1a53c7aaa3416f)

# おわりに
**Delphi 5** 以降ならコンソールアプリケーションを作るのに苦労 (?) しなくていいって事ですね。

なお、**Delphi 5** がウィザードで生成するコンソールアプリケーションのひな型は次のようなものになります。

```pascal:Project1.dpr
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;

begin
  // ここにプログラムコードを書いてください。
end.
```

最新の **10.4 Sydney** だと次のようなコードが生成されます。

```pascal:Project1.dpr
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

begin
  try
    { TODO -oUser -cConsole メイン : ここにコードを記述してください }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
```

最近の Delphi は macOS 用のコンソールアプリケーションや Linux (Enterprise 版以上) 用のコンソールアプリケーションも作れますヨ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/1734fe3b-352c-11d2-bd2c-70404163b463.png)
あと、コンソールアプリケーション用のアイコンがインストールフォルダ直下にあります。48x48, 32x32, 16x16 の 8bit / 32bit 色アイコンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f5c3500d-5359-562a-3513-7af4988900da.png)

**See also:**

 - [コンソールアプリケーション (DocWiki)](http://docwiki.embarcadero.com/RADStudio/ja/%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3)
 - [Application の種類（Delphi）(DocWiki)](http://docwiki.embarcadero.com/RADStudio/ja/Application_%E3%81%AE%E7%A8%AE%E9%A1%9E%EF%BC%88Delphi%EF%BC%89)
 - [macOS で Hello World コンソール アプリケーションを構築する (DocWiki)](http://docwiki.embarcadero.com/RADStudio/ja/MacOS_%E3%81%A7_Hello_World_%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B)
 - [Delphi で Hello,world. (コンソールアプリケーション) (Qiita)](https://qiita.com/ht_deko/items/aaf8f3fd705a5dba98a5)
 - [Delphi で最少のソースコードを書いてみる (Qiita)](https://qiita.com/ht_deko/items/c81a8bacd7e299c45340)
 - [Delphi のコンソールアプリケーションで文字色変更と座標指定をしたい！ (Qiita)](https://qiita.com/ht_deko/items/e0a12036de0596c9cbae)
 - [Delphi で PL/0 をコンパイルする (Qiita)](https://qiita.com/ht_deko/items/a3080ec5a95e320eade1)