| Access Tips by pPoy |
| Form | 画像をテーブルに保存せず直接ファイルから表示する方法 +画像をクリックしてIE で表示する方法 《InternetExplorer.application》 (Ac97,Ac2000,Ac2002) |
Access mdb 外に保存された画像ファイル (ファイル名のみテキスト型フィールドに保存済みの物) を、 コードで呼び出してフォームに表示し、且つその画像をクリックしたときに全体表示する方法です。 画像の表示は、IE (インターネット・エクスプローラ) を起動して行います。 IE で開くことにより、ユーザによる画像ファイルの予期しない変更を防ぐことができます。 画像ファイルの格納されているフォルダは、LAN に接続されたファイルサーバとします。 テーブル構成やフォームの細かい設定方法は、こちら を参照してください。 「準備1」〜「準備3」 までを設定後、「準備4」 の続きの VBA 部分を以下のように入力します。 ※ ただし (画像の保存場所は別フォルダですが) 画像名のみをテーブルに登録します。 ※ パスはコードで指定する為、テーブルには画像フォルダ用のパスを登録しないでください。 | |
|---|---|---|---|
|
≪準備4≫ 画像保存用のパスを、フォームの宣言セクション に記述します。 同時に、IE が完全に開くまで処理を休止する為の API 関数の宣言も登録します。 ※ 休止を入れないと、不完全に IE が開いてしまい処理が失敗します。 まず、新規のフォームにコードを登録します。 作成したフォームのデザイン画面を表示して、ツールバーから、「コード」 ボタンを押します。
表示された VBE 画面の一番上に、以下のコードを入力します。
Option Compare Database '※ この2行は最初からあります。
Option Explicit '※ 無ければ追加してください。
'画像保存用のサーバ内フォルダパス
'\\で始まるパスはお使いの環境に合わせて変更してください
Const imgPath = "\\ImgFileServer\Imgs" '※ パス例
'休止用 API関数
Private Declare Sub Sleep Lib "KERNEL32.dll" _
(ByVal dwMilliseconds As Long)
| ||
|
≪準備5≫ イメージコントロールに画像を表示する為に、「フォーム」 の 「レコード移動時」 イベントに以下のコードを記述します。
Private Sub Form_Current()
On Error GoTo Err_Form_Current
'画像をテーブルに保存せず直接ファイルから表示する処理 2008/01/03 pPoy
Dim fPath As String '画像のフルパス
If IsNull(Me!FileName) Then
'新規レコードに移動した際はデザイン時の画像を表示
Me!img_1.Picture = imgPath & "\くまさん.gif"
Else
'画像をフルパスでセット
fPath = imgPath & "\" & Me!FileName
Me!img_1.Picture = fPath
End If
Exit_Form_Current:
Exit Sub
Err_Form_Current:
MsgBox Err.Description
Resume Exit_Form_Current
End Sub
| ||
|
≪準備6≫ 以下は新規レコードで入力されたファイル名の画像を、即座に表示する為の処理です。 このコードは、「FileName」 テキストボックスの、「更新後処理」 イベントに記述します。
Private Sub FileName_AfterUpdate()
'画像ファイルセット処理コール 2008/01/03 pPoy
Call Form_Current
End Sub
| ||
|
≪準備7≫ 最後に、画像をクリックしたときの処理を、「img_1」 イメージコントロールの、 「クリック時」 イベントに記述します。
Private Sub img_1_Click()
On Error GoTo Err_img_1_Click
'画像をクリックしたら画像ファイルをIEでオープン 2008/01/03 pPoy
Dim objIE As Object 'InternetExplorer.application
Dim fPath As String '画像のフルパス
'画像が無ければ何もしない
If IsNull(Me!FileName) Then Exit Sub
'画像ファイルパスセット
fPath = "file:\\" & imgPath & "\" & Me!FileName
'IEをブランクでオープン
Set objIE = CreateObject("InternetExplorer.application")
With objIE
'ツールバー・ステータスバー・アドレスバー非表示
.Toolbar = 0
.StatusBar = 0
.AddressBar = 0
'ブランクでオーブン
.Navigate "about:blank"
End With
DoEvents 'ちょっと一息
With objIE
.Navigate fPath 'IEに画像セット
.Width = 350 '※ IEの幅
.Height = 450 '※ IEの高さ
.Document.Title = Me.myMemo 'IEのタイトルセット
.Visible = True 'IE表示
End With
'表示終了まで待ってから IEオブジェクト開放
Do While (objIE.Busy)
Sleep 200 '0.2秒休止
Loop
Set objIE = Nothing
Exit_img_1_Click:
Exit Sub
Err_img_1_Click:
MsgBox Err.Description
Resume Exit_img_1_Click
End Sub
| ||
|
≪結果≫ 以上で設定は終了です。 フォームを開くと無事に最初の画像が表示されます。 画像をクリックすると、ちょっと遅れてオリジナルの画像ファイルが IEで開きます。 ※ IE のツールバー等を非表示にしてありますので、フォームとあまり区別が付きませんが。(^^ゞ
|
|
≪補足≫ 以上で IE で開く設定は終了です。しかしこれでは少々物足りません。 画像の上にマウスが移動したとき、「手」 の形になるような処理を追加すると完璧です。 以下は、マウスを手の形にするためのコードです。 |
|
≪補足1≫ まず、宣言セクション (VBE 画面の一番上の部分) に以下のコードを追加します。 API 関数の宣言は、フォームに記述するため最初に 「Private」 をつけます。 ※ もしこの関数を標準モジュールで宣言済みでしたら、これらの記述は必要ありません。 ※ 最後の行の Dim rcLC As Long のみ追加してください。
'マウスカーソルを変更するAPI関数
Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" _
(ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
Private Declare Function SetCursor Lib "user32" _
(ByVal hCursor As Long) As Long
Const IDC_HAND = 32649& 'ハンドカーソル
Dim rcLC As Long 'マウスカーソルの戻り値(形状) 格納用
|
|
≪補足2≫ フォームの 「開くとき」 イベントに以下のコードを記述します。
Private Sub Form_Open(Cancel As Integer)
'マウスポインタを手の形にするためのマウスカーソル取得
rcLC = LoadCursor(0&, IDC_HAND)
End Sub
|
|
≪補足3≫ 最後に、「img_1」 イメージコントロールの、「マウスボタン移動時」 イベントに以下のコードを記述します。
Private Sub img_1_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
'イメージの上ではマウスを手の形に変更する 2008/01/03 pPoy
'ハンドカーソルをコール
Call SetCursor(rcLC)
End Sub
|
≪完成≫![]() 以上で補足の処理は終了です。 画像の上にマウスを移動すると、 マウスが手の形に変わります。 画像から外れると通常の形に戻ります。 手の形の時画像をクリックすると、 IE で画像ファイルが開きます。 |
≪注意≫
|
☆ 感想をお知らせください (直接ブラウザから送信致します。メールアカウントは不要です。)
form mail はこちら
Copyright(C) pPoy 2008