Accessで画像ファイルを管理するときに、ファイル名だけでは画像の内容を判別することは難しいと思います。そんなときに、Accessフォームの画面上に、対象となる画像ファイルの画像が表示されると便利かと思います。
そこで今回は、Accessフォームに画像を表示させる方法を紹介していきます。なお、以前に紹介したファイルパスの取得方法、フォームウィザードを使ったフォームの作成方法の記事の続きとして、フォームを作成していきますので、まずは以下の記事もご確認いただければと思います。
以上の記事のとおり作成すると、図1に示す「画像確認フォーム」フォームとして、レコードソースには「T_ファイル」テーブルが設定されています。ここに、画像表示の機能を設けていきましょう。
画像ファイル表示機能の追加方法
今回追加する機能は、「T_ファイル」に保存している各画像ファイルのパスを取得し、対象となるファイルの画像をフォーム上に表示させるものです。
図1に続いて、図2に示すように「フォームデザインツール」の「イメージ」アイコンを選択します。
イメージオブジェクトの設定範囲を図3に示すように「画像確認フォーム」上に設定し、オブジェクトの名前を「i_Picture」にします。
続いて、図4に示すように詳細セクションを選択した後、「レコード移動時」プロパティにイベントプロシージャを設定します。
イベントプロシージャを設定した後、右側の「…」ボタンをクリックするとVBA画面が表示されますので、以下のコードを追加します。
Private Sub Form_Current() 'ファイルパスから拡張子を取得し、jpg又はpngであれば画像を表示させる。 If Mid(Me.ファイルパス, Len(Me.ファイルパス) - 3, 3) = "jpg" Or Mid(Me.ファイルパス, Len(Me.ファイルパス) - 3, 3) = "png" Then 'Pictureプロパティに対象となる画像ファイルのファイルパスを取得する。 'ハイパーリンクのため左右にある「#」を除く必要がある。 Me.i_Picture.Picture = Mid(Me.ファイルパス, 2, Len(Me.ファイルパス) - 2) 'フォームの画面を更新 Me.Refresh Else '画像ファイルでなければ画像を表示させない。 Me.i_Picture.Picture = "" Me.Refresh End If End Sub
実装したコードについて内容を確認していきましょう。
If文では、jpgファイル、pngファイルのチェックをします。ファイルパスはフォーム上にある「ファイルパス」テキストボックスの値を用いますが、この値はハイパーリンクとして参照先に飛ぶことができるように、例えば「abcd.jpg」ファイルと表示されていても、実際には「#abcd.jpg#」として「#」が両側にあることに注意してください。したがって、Len関数では「#abcd.jpg#」の文字数として「10」を返すことになります。
Mid関数では、拡張子jpg、pngが3文字であることから、Len関数で返された値から 3 を引くことで、文字の読み出し位置を設定しています。If文での判定結果で対象となればPictureプロパティの設定をします。
「i_Picture」イメージのPictureプロパティに、ファイルパスの値を設定します。この時もファイルパスの両側にある「#」は不要となるため、Mid関数を用いて必要な文字情報だけを取得するようにしています。
Me.Refreshによって画面系の更新をすることで、ハイパーリンク先の画像が表示されるようになります。また、ファイルパステキストボックスに、jpg又はpng以外のファイルパスが格納されている場合、Pictureプロパティへに画像ファイルが設定できませんので、Nullを渡すようにしています。
以上が、実装したコードの処理内容となります。
コード実装ができたと思いますので、早速実行結果を確認しましょう。
動作確認
改めて機能追加したフォームをフォームビューで開きます。すると図5に示すような画面(画像は用意された画像ファイルの内容が表示されます。)が表示され、レコード移動すると、次の画像が表示されると思います。
また、レコード中のファイルパスに画像ファイルのパスが保存されていない場合は、図6に示す画面となります。
このようにして、対象ファイルの拡張子からjpg、pngを判別してフォームに画像を表示させるか否かを設定しています。
まとめ
今回は、Accessフォームに画像を表示させる方法を紹介しました。画像ファイルの管理用データベースなど、あまり用途は広くないかもしれませんが、Accessの機能を用いることで、画像ビューワーを作ることもできますので、是非活用してみてください。
スポンサーリンク
コメント