アプリ版:「スタンプのみでお礼する」機能のリリースについて

OSはWinXPでACCESS2000という環境です。
画像管理をしたいと考えています。

具体的には、フォームに作成したコマンドボタンをクリックすると、
ファイルを選択する画面が表示されて、そこで指定した画像が
イメージコントロール内に挿入されるというイメージで画像管理
できたらと考えています。

その時、指定した画像はテーブルにも画像名のみがレコードとして
保存されるようにしたいです。また挿入した画像は指定フォルダに
自動で保存(コピー?)されてフォームに表示される画像はこの指定
フォルダからリンクで表示される形をイメージしています。
更にフォームに表示される画像をクリックすると拡大して閲覧できる
ようにもしたいと思っています。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=402425
のページも参考にさせて頂いたのですが、イベントでフルパスを設定する
為の式がうまく設定できないので結局、イメージしていることが行えず
悩んでいます。

画像をOELオブジェクトにすると容量が重くなりますし、画像名でレコード
管理ができないので避けたいのですが、上記イメージを実現する為に
よい方法があれば教えて下さい。よろしくお願いします。

A 回答 (1件)

こんにちは。

maruru01です。

ファイルを選択→イメージコントロールに表示→テーブルに保存
という流れでしょうか。

ファイル選択は、おそらくコモンダイアログコントロールを使用していると思います。
そこで選択ファイルのフルパスを指定出来るので、イメージコントロールのPictureプロパティに、

Me!Image1.Picture = ファイルのフルパス

のようにすれば表示します。(実際はフルパスは変数に格納するでしょうが)
テーブルへの保存ですが、コモンダイアログの選択でファイル名のみも取得出来るので、それを保存すればいいでしょう。
また、フルパスからファイル名のみを取り出す(一番後ろの"\"の位置を探して、それより後ろを取り出す)のもいいでしょう。
指定フォルダへのコピーは、FileCopyメソッドを使用して、

FileCopy 元のファイルのフルパス, コピー先のファイルのフルパス

のようにします。
あと、拡大閲覧は、閲覧用のフォームに大きなイメージコントロールを貼り付けて、そのフォームを開くなどの方法があります。

この回答への補足

ご回答ありがとうございます。返答が遅くなって申し訳ありません。ご回答をヒントに色々と試してみたのですが、データベース設計は素人なのでなかなか思うように作成できませんでした。

>ファイルを選択→イメージコントロールに表示→テーブルに保存
という流れでしょうか。
流れは↑このとおりです。テーブルに保存するのは画像のファイル名のみに
したいと思います。そのほうが指定フォルダ内にコピーされた画像をフォーム上に表示させることができるような気がしたので・・・

コモンダイアログコントロールの設定は色々調べてActiveXコントロールから行うということを知ったのですが、この設定はVBがインストールされていなければ使用できませんでした。できればVBを使用しない方法をとりたいと思いモジュールで画像挿入できるようにしてみました。これだとデータベースにはフルパスで保存されてしまうので、指定したフォルダ内のファイルから画像を表示させることができず、いきづまっています。
設定したモジュールはこんな感じです。
ファイル名を抜きだすにはどうしたらよいでしょうか?
あと、イメージに近いデータベースがこちらのサイトにあります。
http://www.ark-9.com/~bluemiffy/read/trb.html
素人の私でもDB完成ができるよう、アドバイス宜しくお願いします。


Option Compare Database
Option Explicit

Declare Function GetOpenFileName Lib "COMDLG32.DLL" Alias _
"GetOpenFileNameA" (pOpenfilename As OpenFileName) As Boolean

Type OpenFileName
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

Public Function API_OpenFileName() As String
Dim OF As OpenFileName
Dim tmp As String
Dim stu As Long
Dim filter As String

tmp = String$(5120, Chr$(0))
filter = "全てのファイル(*.*)" + Chr$(0) + "*.*" + Chr$(0) + Chr$(0)
With OF
.lStructSize = Len(OF)
.hwndOwner = Application.hWndAccessApp
.lpstrFile = tmp
.nMaxFile = 5120
.lpstrFilter = filter
.nFilterIndex = 1
.Flags = &H4
.lpstrTitle = "ファイルを指定してください"
End With
stu = GetOpenFileName(OF)
If stu Then
API_OpenFileName = Left$(OF.lpstrFile, InStr(OF.lpstrFile, Chr$(0)) - 1)
End If
End Function

補足日時:2003/03/12 09:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!