トップへ(mam-mam.net/)

Delphiとは?テキストエディタ作成チュートリアル

検索:

Delphiってどんな言語?

Delphiを一言でいうと、マイクロソフト社VB6とC++を足して、ライブラリをかなり充実させた感じ。
マイクロソフト社の.net並みのライブラリを搭載しています。(.netライブラリはDelphiのライブラリ開発者を買収して作らせたのは有名な話ですね。)
少しVB6やVBAを使ってた人は、簡単にDelphiでプログラムを作ることができます。 また、基本的なAPIヘッダーはライブラリとして搭載しているので宣言なしでほぼ使えます。
教育言語Pascalにオブジェクト指向が追加された言語だそうで、構文が厳格なので可読性が良いです。
まずはVB6みたいに使ってみて、慣れてきたら構造体やポインタやオブジェクト指向に少しずつチャレンジしてみても十分にプログラムを作成できます。

また、Delphiで作成してコンパイルした実行ファイルはほとんどの場合、単体で実行できます。 つまり、別途ランタイムのインストールなどは不要でコンパイルした実行ファイルを配布するだけです。 処理速度が速く、クライアントのパワーを存分に発揮させることができます。 コンパイル処理は驚くほど速く、数秒で実行ファイルが生成されますのでデバッグも行いやすいです。
いいことばかりに感じますが、大きな弱点があります。それはマイクロソフト社の製品ではないためマイナーであることです。

Delphiのダウンロード

Delphi Community Editionを無料でダウンロードして使うことができます。
https://www.embarcadero.com/jp/products/delphi/starter/free-download
プログラムに慣れてきたら上位版を購入するなり、他社の開発製品を使うなりすればいいでしょう。

何かプログラムを作成してみる

(1)Delphiを起動して新規プロジェクトを作成する。

ファイル⇒新規作成⇒VCLフォームアプリケーションをクリックします。

(2)ボタンを配置する。

右の下にあるツールパレットの「Standard」グループ内にある「TButton」をフォームへドラッグ&ドロップします。
そうするとButton1が作成されます。

(3)Button1が選択された状態で、左ペインにある[プロパティ Caption]を「Button1」から「開く」に変更します。

ボタンに表示されている文字がButton1から開くに変わりました。

(4)ファイルを開くダイアログをフォームへ配置する。

右下にあるツールパレットの「Dialog」グループ内にある「TOpenDialog」をフォームへドラッグ&ドロップします。

(5)OpenDialog1を選択した状態で、プロパティ「フィルター」を設定する。

左ペインにあるプロパティ「Filter」の[・・・]ボタンをクリックします。

(6)フィルタ名、フィルタを設定する。

フィルタ名とフィルタに「*.txt」を入力し、[OK]ボタンをクリックします。

Filterプロパティに「*.txt|*.txt」と入力されました。

(7)TMemoをフォームにドラッグ&ドロップし、大きさを大きくします。

右下にあるツールパレットの「Standard」グループ内にある「TMemo」をフォームへドラッグ&ドロップし、マウスでドラッグして大きくします。

(8)Memo1を選択した状態でScrollbarsプロパティを設定します。

Memo1を選択した状態でScrollbarsプロパティを「ssBoth」に設定します。(スクロールバーが表示されます)

(9)「Button1」クリックしてクリック時イベントを作成する。

「Button1」(開く ボタン)をクリックして選択状態にします。左ペインのタブを「イベント」に切り替えて「OnClick」の右側をダブルクリックします。

(10)そろそろプログラムを記述する。

上記(9)の操作により「Button1」をクリックしたときのプログラムを記述する準備が整いました。

(11)プログラムを記述する。

以下の赤字の部分を記述します。

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    Memo1.Lines.LoadFromFile(
      OpenDialog1.FileName,TEncoding.ANSI);
  end;
end;

<参考>下にあるのタブにより「デザイン」と「ソースコード」の表示を切り替えできます。

<参考>プログラムを以下に変えると、文字コードUTF-8のテキストファイルを読み込めます。
(元のソースコードだと文字コードShift-JISのテキストファイルを読み込めます。)

  OpenDialog1.FileName,TEncoding.ANSI);
        ↓
  OpenDialog1.FileName,TEncoding.UTF8);

(12)プログラムを保存する

上部にある「すべて保存」ボタンをクリックします。

保存先フォルダを「ドキュメント\Embarcadero\Studio\Project」にして、 「新しいフォルダ」をクリックし、フォルダ名を「テキストエディタ」にして、このフォルダをダブルクリックします。

「保存」ボタンを押します。(1つのフォームとそのプログラムの保存)

次にプロジェクト(複数のフォームを束ねるようなもの。1つのフォームでも存在する)の保存先とファイル名を聞いてきますので、 そのまま「保存」ボタンを押します。

これで作成したプログラムの保存が終わりました。

(13)実行してみる。

上部にある右矢印ボタン、またはキーボードのF9を押すとコンパイル(パソコンが理解できる機械語へ翻訳すること)され実行できます。

開くボタンを押すと、テキストファイルを選択できます。テキストファイルを選んで「開く」ボタンを押すとテキストファイルを表示できます。

実行ファイルは既に生成されていて、
c:\users\[OSログインしたユーザー名]\Documents\Embarcadero\Studio\Projects\テキストエディタ\Win32\Debug\Project1.exe
です。ダブルクリックでも実行できます。
Delphiで作成した実行ファイルは通常、ほかのファイルに依存しないので、 単体で実行することができます。(ランタイム配布などは通常は必要なし。 他に何かインストールなどしなくても実行ファイを配布するだけで動作します。)

上記サンプルではファイルを開くだけですが、 保存はTSaveDialog(デフォルトでSaveDialog1の名前になる)と 保存用のTButton(デフォルトでButton2の名前になる)を ドラッグ&ドロップして、保存用のボタンのOnClickイベントに以下ソースコードを入力するだけです。

procedure TForm1.Button2Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
  begin
    Memo1.Lines.SaveToFile(SaveDialog1.FileName,TEncoding.ANSI);
  end;
end;

(UTF8で保存する場合はMemo1.Lines.SaveToFile(SaveDialog1.FileName,TEncoding.UTF8);とする)

既にお気づきになった方もいらっしゃるかもしれませんが、 DelphiではVB6のようにソースコードを記述するだけでオブジェクト指向プログラミングになっています。
ソースコードを見ると、TFormクラスから派生したTForm1クラスをプログラミングしていたことがわかります。

//ユニット名(このファイル名は必ずユニット名.pasでなければならない。)
unit Unit1;
//宣言部
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)  //TFormクラスの派生クラスTForm1の宣言
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

//グローバル変数の宣言
var
  Form1: TForm1;  //TForm1クラスのインスタンスが入る変数Form1の宣言

//実装部
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    Memo1.Lines.LoadFromFile(
      OpenDialog1.FileName,TEncoding.ANSI);
  end;
end;

end.