プロパティを設定する

プロパティを設定する

配置したコンポーネントは、それだけではただ表示されているだけですが、アプリケーション固有の動作に変更しなければなりません。これを行うのがプロパティとイベントです。プロパティは、コンポーネントの外観や動作を設定するものです。例えば、ボタンに表示される文字列や色などを指定するなどできます。

イベントは、コンポーネントに対してなされた操作に応答する動作を定義できます。例えば、ボタンを押したときに実行されるコードを記述したり、ウィンドウが閉じたりするときに行う処理を記述できます。

最初にForm1のプロパティを設定します。フォームのタイトルは、デフォルトで「Form1」になっていますが、これを変更します。タイトルは、Captionプロパティで指定します。設計画面でForm1を選択し、オブジェクトインスペクタのCaptionの項目に、「イメージビューワー」と入力します。

図3:プロパティの設定

次にPanel1を選択し、同じくCaptionプロパティに「No Image」と指定します。これが、画像が読み込まれていない状態で表示されるテキストになります。

プロパティには、レイアウトを制御するものもあります。AlignプロパティをalClientに設定すると、画面いっぱいにパネルが広がります。さらに、BorderStyleプロパティをbsSingleに変更し、パネルに枠が表示されるようにします。

図4:Panel1のプロパティ設定(クリックで拡大)

次に、TImageコンポーネントをPanel1の上に配置します。このコンポーネントが画像を表示します。

配置したImage1のAlginプロパティを、alClientに変更します。FormやPanelは、コンテナと呼ばれる特殊なコンポーネントで、その上に別のコンポーネントを配置できます。Alignプロパティは、コンテナ上でどのようにそのコンポーネントをレイアウトするのかを規定するのです。

以上で、画面設計は完了です。

図5:完成した画面レイアウト

TActionListとジェスチャー

多くのWindowsアプリケーションは、メニューやボタン、ショートカットなどによって、特定のコマンドを実行します。メニューやボタンに対して、単純に特定のコマンドを実行します。素早く作っても、拡張できなければ使い捨てになってしまいますから、この点は重要です。

TActionListは、こうしたコマンドを一元管理できる非表示のコンポーネントです。TActionListでは、ファイルを開いたり、保存したりといった一般的なコマンドがあらかじめ用意されており、これらを割り当てることができます。また、独自のコマンドを定義して、同じように扱うこともできます。

今回は、タッチスクリーン上での指の動き(ジェスチャー)によって、特定のコマンドを呼び出すようにしたいと思います。そのため、まず、呼び出すコマンドを定義しておきます。

Form上のActionList1をダブルクリックします。すると、このActionListで扱うアクションを編集できるダイアログボックスが開きます。

ここで、[標準アクションの新規追加]を選択し、リストから、TBrowseForFolderを選択します。このアクションは、フォルダーを選択する操作を行います。

図6:標準アクションの新規追加

追加されたアクションをダイアログボックスで選択すると、オブジェクトインスペクタに、このアクションのプロパティとイベントが表示されます。

[イベント]タブをクリックすると、このアクションに対するイベントが表示されます。ここでは、フォルダーを選択したときに発生するOnAcceptイベントを選択します。

イベント項目の値列をダブルクリックすると、コードエディタに対応するイベントハンドラコードが生成されます。

procedure TForm1.BrowseForFolder1Accept(Sender: TObject);
begin

end;

このコードのbegin~endの間に必要な処理を記述することで、フォルダーを選択したときの動作を定義できるのです。取りあえず、コードの中身を記述するのは後回しにして、次のアクションを定義します。

次は、[新規]を選択してカスタムアクションを定義します。

図7:新規アクションの作成

デフォルトではAction1という名前になっていますが、オブジェクトインスペクタでNameプロパティをAction_Leftに設定することで、リネームします。

これについても、アクションを実行したときに呼び出されるOnExecuteイベントを定義しておきます。

TForm1.Action_LeftExecute(Sender: TObject);
begin
	//Left
end;

同じ手順で、Action_Rightも作成します。これらのアクションは、タッチスクリーンで、指を左右に動かしたときの動作を規定するものです。

初期化と後始末のコード

続いてコーディングをしていきましょう。このアプリケーションでは、特定のフォルダにあるイメージファイルの一覧を保持するために、文字列リストを使います。

文字列リストを確保する初期化コードと、これを解放する後始末のコードが必要ですが、通常のオブジェクト指向プログラミングでは、コンストラクタやデストラクタに記述します。しかし、コンポーネントを用いた開発では、同じことをイベントで実装できます。

Form1のOnCreateイベントに以下のコードを記述します。

procedure TForm1.FormCreate(Sender: TObject);
begin
  FIndex := 0;
  FList := TStringList.Create;
end;

ここで初期化している変数は、TForm1のprivate変数として定義します。

private
  { Private宣言}
  FIndex: Integer;
  FList: TStringList;

これで、文字列リストの初期化ができました。同じように、OnDestroyイベントに以下のコードを記述します。

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FList.Free;
end;

これは解放コードです。

なお、このアプリケーションでは、入出力とJPEGの画像ファイル処理を行いますので、プログラムコードの上のほうに記述されているuses節に、以下の2つのユニットを追加しておきます。

IOUtils, jpeg
この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30