"常に新しい、不変のDelphi - Delphi 2009以降の新機能" のソースコードが何だったのかを検証してみる

# はじめに
["常に新しい、不変のDelphi - Delphi 2009以降の新機能" ](https://community.idera.com/developer-tools/b/blog/posts/always-new-always-delphi---new-features-since-delphi-2009-ja) って記事をエンバカさんが公開したのですが、途中に以下のような記述がありました。

> 実は、ローンチトークで使用したスクリプトとすべてのデモファイルを
> 見つけました。それはすべて添付の.zipファイルにあります。

zip は 実際に DL 可能でした。しかしながらこれの中身が何なのか記事中では触れられていなかったので調べてみる事にしました...とはいえこれは Delphi 1 のソース、最新の Delphi はおろか Delphi 2007 や Delphi 7 ですらマトモに開けないでしょう。

# Delphi 1
初代 Delphi は 1995 年のリリースです。誕生日は 2/14 ですが、日本ではもうちょっと後でリリースされました。Windows 3.1 で動作する**唯一の 16bit 版 Delphi** でもあります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/236f9b5a-5947-b523-5955-a497edaa33de.png)
© (コピーライト) の表記が 1983-95 となっていますが、**Turbo Pascal** 1.0 からのカウントだと思われます。

 - [Delphi のご先祖を辿る (Qiita)](https://qiita.com/ht_deko/items/b41b0cd45181aec522d4)

## 16bit 版 Delphi 1 を動作させる。
Windows XP 以前であれば Delphi 1 はインストール可能だろうと思います。Windows 10 の 64bit 版とかだと NTVDM がないのでまず動作しません。

 - [仮想 DOS マシン (Wikipedia)](https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3DOS%E3%83%9E%E3%82%B7%E3%83%B3)

※ Delphi 1 は Delphi 2～4 の CD-ROM の中にも入っていますヨ！

## Windows 3.1 で Delphi 1 を動かしたい！
Windows 3.1 日本語版をマトモに動作させたいのなら VM は **Virtual PC 一択**だと思います。Vista 以前であれば　Virtual PC 2004 / 2007 が使えます。

 - [Virtual PC 2004 (Microsoft)](https://www.microsoft.com/ja-jp/download/details.aspx?id=3243)
 - [Virtual PC 2007 (Microsoft)](https://www.microsoft.com/ja-jp/download/details.aspx?id=4580)

Windows 7 だったら **Windows の機能の有効化または無効化** でインストールできます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/81d10d7f-c58e-bb41-250e-8586f09c26fc.png)
Virtual PC なら 1024x768 の解像度で Windows 3.1 を実行できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/f4417a56-a2aa-3b0d-836c-b5dfcac7f291.png)

古い OS を動かしたいのであれば、Windows 7 が動作する PC を用意しとくといいでしょう。Virtual PC は Windows 10 では動作しませんし、Hyper-V では Windows 3.1 がマトモに動作しません。

え？**「VM の中で VM 動かせばいいじゃないか？」**ですって？それでマトモに動くのならそうしたいのですがね...。

なお、Virtual PC を起動した PC を RDP で接続するとマウスが使えなくなくなります (マウスポインタが見えない)。

## zip の中身
さて、本題の zip の中身ですが、解凍すると 3 つのプロジェクトファイルが入っています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/2fe2a5fe-4062-6fba-4262-fa225c5d48de.png)
順に調べてみましょう。

### ・dbbrowse.dpr - DYNAMIC COMPONENT CREATION / DELEGATION -
DB のテーブルの内容を DBGrid に表示するプログラムです。[動的コンポーネント生成] のデモのようです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/6390389a-f908-0832-175b-a88ff29ac430.png)
普通にコンパイルできました。

### ・delphi.dpr - DELPHI IN DELPHI -
このプロジェクトはファイルが足りなくてコンパイルできませんでした。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/f25fb67f-e9ce-71bd-7cc0-f1dcf02a08bc.png)
まぁ、それはそうだと思います。だって **Delphi 自身をビルドするためのプロジェクトファイル** ですもの...。これは [Delphi は Delphi で書かれている] という事を示すデモで使われたもののようです。

`AppBuilder` というのが見えるかと思いますが、これが Delphi の製品名だったハズの名前です。`Delphi` はコードネームです。`AppBuilder` という名前がどこぞの製品とバッティングするのが判ったので、コードネームがそのまま製品名になったと聞きました。

### ・launcher.dpr - CREATING A NEW COMPONENT -
Windows 3.1 の頃によく作られたアプリケーションランチャーのひな型 (?) のようですが、そのままではコンパイルできません。RunButton というコンポーネントがないようです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/1543c5ac-846a-d53b-47e1-a32380bf5393.png)
ですが、ご丁寧に**コンポーネントが付属している**ので [オプション | コンポーネントのインストール] を開き、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/bd7099d6-d528-35fb-cbb4-656c5af64f90.png)
[追加] ボタンを押して Runbtns.pas を指定すれば
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/19957714-902a-a4c4-99e3-de84675dd032.png)
コンポーネントツールバーの [Samples] タブに RunButton が追加されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/604f07cd-3911-c6e2-fe29-8295f0a77135.png)
そして launcher.dpr を開くと...
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/5482d94a-b86e-fce4-e11e-9519e75d974a.png)
このままコンパイルするとちゃんとランチャーとして動作します。コードはこれだけなのにね。

```pascal
unit Launch;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Buttons, Runbtns, ExtCtrls;

type
  TLaunchForm = class(TForm)
    Panel1: TPanel;
    RunButton1: TRunButton;
    RunButton2: TRunButton;
    RunButton3: TRunButton;
    RunButton4: TRunButton;
    RunButton5: TRunButton;
    RunButton6: TRunButton;
    RunButton7: TRunButton;
    RunButton8: TRunButton;
  end;

var
  LaunchForm: TLaunchForm;

implementation

{$R *.DFM}

end.
```
TRunButton は Command プロパティに設定された文字列を WinExec() で実行するコンポーネントなのでコーディング不要なのです。アイコン (BMP 画像) は Glyph プロパティで指定できます。

これは [新規コンポーネント作成を行うデモ] で使われたもののようです。

### ・LAUNCH.TXT
Delphi ローンチ時のスクリプトです。プログラマが思い浮かべるスクリプトではなく、ローンチトークの**台本**の事です。[ヘジたん](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%B3%E3%83%80%E3%83%BC%E3%82%B9%E3%83%BB%E3%83%98%E3%83%AB%E3%82%B9%E3%83%90%E3%83%BC%E3%82%B0)がこの通りに喋ったのかどうかは不明です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/00d53cf4-1083-e8e0-961c-d7bfee9e60a3.png)
Windows 3.1 の頃はこうやって Delphi を**タブ形式テキストエディタ**としても使っていました。「どこがタブ型？」Delphi 1 のタブは下にあるのです。

# おわりに
元記事を読んでモヤっとしたのがスッキリしたのならば幸いです。そういえば、もう一つモヤっとする箇所がありますよね？

> 小さな “speed is” のクリップに示されているアテナの胸像は、
> 今は私のホームオフィスに鎮座しています。

(ビデオ)クリップとはこれの事です。
![Delphi.gif](https://qiita-image-store.s3.amazonaws.com/0/21785/f0907b7c-ed31-3db0-dd4b-4fff8025a88d.gif)

> 私はビデオクリップを見つけることができませんでした（引き続き探します）が、

このビデオクリップは Delphi 1 のインストール CD または Delphi 2～4 の DELPHI16 フォルダ内の VIDEO フォルダに格納されています (DELPHI.AVI)。

スッキリしましたか？