【Delphi / C++Builder】Starter無償提供1周年記念！アプリケーション開発の基礎が学べるWebセミナー（1限目）

#【Delphi / C++Builder Starter チュートリアルシリーズ 】<br> Starter無償提供1周年記念！‟アプリケーション開発の基礎„

2017年9月22日(金）17:00より、Delphi/C++Builder Starter 無償提供開始から1周年を記念して、Starterチュートリアルシリーズ の特別編「アプリケーション開発の基礎」Webセミナーを実施しました。この記事では そのWebセミナーの1限目部分について、記載＆補足してまいります。

## 無料版 Starter Edition  10.2 Tokyo Release 1 入手の方法
無料で使える Windowsアプリ開発環境の Delphi / C++Builder Starter 、まだ入手されていない方はエンバカデロテクノロジーズ社の[Webページ](https://www.embarcadero.com/jp)から上部にメニューバーらしきところに表示されている「無料版」からDelphi Starter もしくは C++Builder を選択して入手してください。
入手、インストールの詳細を知りたい方は、[以前の記事](https://qiita.com/kazaiso/items/1c0df8ff902405d1c214)をご参照ください。※すでにインストール済ではあるものの、新しい10.2.1版に更新したいという方は、[こちらをご参照](https://qiita.com/kazaiso/items/579d049cc15549650e20)ください

##セミナー動画をオンデマンドで公開中
セミナーのビデオを公開しています。下記URLより視聴申し込みを行うと無料でご覧いただけます。

* http://forms.embarcadero.com/starter-tutorial-webinar-special

##アジェンダ：アプリケーション開発の基礎が学べる

実施内容は下記3部に分け、Q&A形式で進めました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/145847/9e6b68f3-87b9-d37a-8f24-be2ac8d3a37b.png)



##1限目 :「データ入力、保存、出力を学ぶ」
1限目のQ&Aの内容は下記の通り。順にご説明してまいります。

* 片手でデータ入力できるようにしたい！
* 入力されたデータを一覧表示したいのだけど…？
* 作ったデータを保存したいのですが…？

###[Q] 片手でデータ入力できるようにしたい！
タブレットデバイスなどのアプリを作って野外利用する、そんなケースでは、キーボードはありません。そんな用途が考えられるアプリの場合、キーボードなく、片手で入力できるようにするには…

以前のStarterチュートリアルではTEditを入力コンポーネントとして紹介しましたが、これはキーボードによる入力を必要としていました。

**そんなときにはタップやクリックなどで入力する方法を使いましょう。**例えば複数選択肢からクリック、タップで値を選択できるコンボボックス（TComboBox) や、矢印の上下ボタンをクリップ、タップすることで数値を入力できるスピンエディット(TSpinEdit)を使ってみましょう。 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/145847/5fb2c13f-0ab2-69a7-ed30-86db5e32a9a1.png)

###入力されたデータを一覧表示したいのだけど…？
入力方法は思いついた！でもその結果を見やすく表示したい…そんな時、どうしましょうか？

以前のチュートリアルシリーズではテキスト情報として複数表示するならTMemoを紹介しましたが、一覧表示するだけでデータとして活用するには物足りない！

**そんなときは、入力データをデータベースのように扱って表示してみましょう！**入力したデータをまとめて「データセット」として保持することでデータセットを表として出力すれば見やすくきれいに表示できます。TClientDataSetにデータを保存し、TDataSouceにデータを渡してデータ配布してもらう中継ぎをしてもらい、TDBGrid繋ぎ渡して一覧表示します。

※TClientDataSetの使い方、[詳しく記載したブログ](https://qiita.com/CYonezawa/items/8ba066ac0487f16bea51)が@CYonezawaさんによって記載されています。

ちなみにセミナーでコードを使ってTClientDataセットにレコード登録していたときのコードは下記の通り

```delphi
   begin
      //データセットをオープン（最初に念のためいったんクローズしてから開く）
      ClientDataSet1.Close;
      ClientDataSet1.Open;
      //Append することによりデータセットの最後にレコード追加状態に
      ClientDataSet1.Append;
      //データセットに用意したフィールドにテキストを代入　
      ClientDataSet1yard.AsString := seDist.Text + 'ヤード';
      ClientDataSet1hole.AsString := cbHole.Text;
      //追加したデータをPostで確定
      ClientDataSet1.Post;
   end;
```

補足：WebセミナーでTClientDataSetを使うときにはMidas.dllも実行ファイルと一緒に置く必要ありとご紹介しましたが、すみません。StarterではMidas.dllは再配布可能の扱いではありませんでした。Starterのインストール環境にはMidas.dllが存在しますのでTClientDataSetを使用して動作させることができます。しかしStarterがインストールされていなければ動作させることはできない、ということになります。訂正してお詫び申し上げます。

### [Q]作ったデータを残しておきたいのです…
**よろしい、ならば保存だ！** テキスト、CSVなら「TStringList」クラスが保存、ならびに読み込にも便利に使えます。一方、先ほど使ったデータセットとして保存、読み込みするなら、もっと簡単に行えます。

* TClientDataSet.SaveToFile メソッドを使用しましょう。
* ファイルの保存場所を問うダイアログを開くならTSaveDialogが使えます。テキスト形式での保存のためのダイアログなら TSaveTextDialogも良いです。
* ファイル保存のデフォルト場所にもこだわりたいです。一時的な保存場所ならTempフォルダ、テキスト等ならドキュメントフォルダに、保存したいですよね。そんな時、System.IOUtils.TPath を使えば、ドキュメントフォルダやTempフォルダがどこにあるか、取得することができます。

保存の際に使用したコード

```delphi
//ログ保存
procedure TForm1.btnSaveClick(Sender: TObject);
begin
  //ドキュメントフォルダのパスを取得して保存場所ダイアログを開いた時のデフォルトパスに設定
  SaveDialog1.InitialDir := TPath.GetDocumentsPath;
  //保存ダイアログ開いて...
  if SaveDialog1.Execute then
    begin
      //ファイルの保存場所を引数としてファイル形式をXMLUTF8で保存
      ClientDataSet1.SaveToFile(SaveDialog1.FileName, dfXMLUTF8);
    end;
end;
```

ちなみに読み込み側はこのような感じで使えます。

```delphi
//ログ読込
procedure TForm1.btnLoadClick(Sender: TObject);
begin
//  //ログファイル読込のデフォルトパスを設定
  OpenDialog1.InitialDir :=  TPath.GetDocumentsPath;
  //読込みダイアログをひらいて
  if OpenDialog1.Execute then
    begin
      ClientDataSet1.LoadFromFile(OpenDialog1.FileName);
    end;
end;
```



##1限目まとめ
* 片手で入力できるコンポーネントTComboBox, TSpinEditでキーボードなしで入力する方法をご紹介しました
* 入力データを一覧表示する方法として、TClientDataSetと TDataSource、TDBGridを活用してデータベースのようにデータ一式を表示する方法をご紹介しました
* データ保存の方法としてをデータセットの保存法TClientDataSet.SaveToFile、保存場所のダイアログをTSaveDialogで、表示、特定のパス情報をSystem.IOUtils.TPathで取得する方法をご紹介しました。

##2限目、3限目の記事のご紹介
このWebセミナーは3部構成で多く死したもので、当記事では1限目部分のみ記載しています。2限目、3限目で紹介した内容は下記よリご覧いただけます。

* [2限目:「操作性や見た目を変える技法を学ぶ」](https://community.embarcadero.com/blogs/entry/delphi-c-builder-starter-tutorial-special-part2-2017-japan)
* [3限目:「作成したアプリケーションが動かない!? その解決法を学ぶ」](https://community.embarcadero.com/blogs/entry/delphi-c-builder-starter-tutorial-special-part3-2017-japan)