Access Tips by pPoy

  
トップへ←Top    QueryへQuery  FormへForm  ReportへReport  Module(Sub)へSub  Module(Function)へFunction  ExcelへExcel  Etc.へEtc.  Word連携へWord

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 のツールバー等を非表示にしてありますので、フォームとあまり区別が付きませんが。(^^ゞ

結果

右は開かれた画像ファイルの例です。→
タイトルバーには、「Memo」 欄で入力した内容が
表示されています。

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 で画像ファイルが開きます。
≪注意≫
  • 画像をクリックする度に、新規画面で IE が開きます。
    続けて何回もクリックすると大変なことになりますので、注意してください。

  • IE を開くときのサイズは、保存済みの画像に合わせて適当に変更してください。
    高さと幅を指定しない場合、規定のサイズで開きます。

  • 画像ファイル名を間違って入力した場合は、エラーとなります。
    正しいファイル名を指定してください。

  • 次のレコードに移動した時に、一瞬 「画像のインポート中」 のダイアログが表示されます。
    BMP ファイルが指定されたときは、あまり気にならずに表示できます。

  • エラー処理で使用する 「くまさん.gif」 は、必ず他の画像と同じフォルダに保存してください。

  • 画像をクリックして、拡張子に関連付けられたアプリケーションで開く方法は こちら です。


この頁のTOPへTop
【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。
又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

☆ 感想をお知らせください (直接ブラウザから送信致します。メールアカウントは不要です。)
  form mail はこちら

Copyright(C) pPoy 2008