|
▼hatena さん:
ご回答を頂き、感謝致します。
>サイズが大きくなることを心配しているようですが、それほど大きくならないと思いますよ。
>まずは、色の画像ファイルですが、サイズは、1×1ピクセルの最小のものに
>しておいて、連結オブジェクトフレームの「OLEサイズ」プロパティを「ストレッチ」
>にすれば、全体に表示されます。16色BMP なら、122バイトです。
>上記の 色テーブル では2件分のレコードなので、244バイト程度です。
>256色BMPで、レコード数を多くしたとしても、たいしたサイズにはならないと
>思いますが、いかがでしょうか。
>AC97で、帳票フォームでレコード毎に色を変える方法はこれぐらいしかないですし。
−−−−−−−−−−−−−−−−−−−−−−
Access2000です。(Versionを記入するのを忘れてしまい申し訳ありません)
●変更前:
テーブル名:T_色
> CC xx 説明
> −−−−−−−−−−−−−−−−−−
> 1 ビットマップイメージ 出社日
> 2 ビットマップイメージ 連休対象日
> −−−−−−−−−−−−−−−−−−
上記変更前のテーブルは色定義用の「T_色」で、実際に一覧表示の画面に
表示されるものは、以下の「Q_スケジュール(但し、改善前のクエリ)」です。
日01 D01 CC01 T_色_1.xx 日02 D02 CC02 T_色_2.xx
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
4/25(水) 1 ビットマップイメージ 12/28(木) 1 ビットマップイメージ
4/25(水) 1 ビットマップイメージ 4/26(木) 1 ビットマップイメージ
4/25(水) 1 ビットマップイメージ 4/26(木) 1 ビットマップイメージ
7/25(水) 1 ビットマップイメージ 7/26(木) 1 ビットマップイメージ
7/25(水) 2 ビットマップイメージ 8/12(日) 1 ビットマップイメージ
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
※ 実際は1000レコードもあり、毎年約300レコードずつ増える感じです。
10レコード程度なら十分だとしても、レコード追加していく度にサイズが
大きくなってしまうのでは、と思い、下記のようにローカルに置いた
色ファイルを読み込む方法に変えて、なおかつ、帳票フォームの場合も色を
区別できるようにしたい。と思いました。(なるべく、テーブルには
ビットマップデータを多く保存させたくない、と思っております)
●改善の案:
>CC P 説明
>−−−−−−−−−−−−−−−−−−
>1 C:\color1.bmp 出社日
>2 C:\color2.bmp 連休対象日
>−−−−−−−−−−−−−−−−−−
文字列での保存であれば、変更前のようにビットマップをテーブルに
保存せずに済むのでは・・・と考えておりました。1画面1レコードを表示する
場合は、色を区別できますが、以下のクエリを元に一覧表示画面を作成した場合、
Aさんのレコードが第一優先という風に、BさんもAさんと同じ色になってしまいます。
※ちなみに表示させているコントロールの種類は、「変更前は連結OLEオブジェクト」を
使っていましたが、「改善後はイメージ」を使っています。
日01 D01 CC01 T_色_1.P
−−−−−−−−−−−−−−−−−−−−−−−−−−
7/25(水) 1 C:\color1.bmp ←Aさん
7/25(水) 2 C:\color2.bmp ←Bさん
−−−−−−−−−−−−−−−−−−−−−−−−−−
レコード移動時に以下のように、テストプログラムを作ってみたが、1日目の
列全体が同じ色になってしまい、困っています。
Private Sub Form_Current()
Me.連結01.Picture = ""
Me.連結01.Picture = Me.txtP01
↑1日目のパス名は、T_色_1.Pを参照して、色ファイルを読み込み表示。
End Sub
hatenaさんのおっしゃっている通り、上記方法が不可能なら、いろいろ工夫できれば、
と思い、以下のようにしてみました。
●改善の案その2:T_色
CC P xx 説明
−−−−−−−−−−−−−−−−−−
1 C:\color1.bmp 出社日
2 C:\color2.bmp 連休対象日
−−−−−−−−−−−−−−−−−−
xxはOLEオブジェクト型で、空白のままにする。
そうなると、クエリは以下のように表示される。
日01 D01 CC01 T_色_1.P T_色_1.xx
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
7/25(水) 1 C:\color1.bmp
7/25(水) 2 C:\color2.bmp
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
☆部分
T_色_1.xxは空白状態ですが、VBAで「一覧表示画面を表示する場合」のみ、外部ファイルから
指定されたパス名(C:\color1.bmp)を読み込み、挿入することを思いつきましたが、どのようにして
VBAで挿入すればよろしいでしょうか?(連結OLEオブジェクトでコントロールソースはT_色_1.xx)
もちろん、画面を閉じる時は空白に戻したいものですが、、・・・。
挿入するプログラム表現方法を過去ログとかいろんなサイトを探しても類似のものが
見つからなくて困っています。
(レコード移動時に記載するべきか、開く時に記載するべきか・・・など)
(但し、約10人にプログラム本体を配布、データだけの本体をサーバに置くので、
同時に画面を開いた場合、挿入のタイミングも考慮しなければならない。
複数の人が同時に画面を開いている場合、テーブルに挿入したとしたら、1人が画面を閉じて
空白に戻した場合、どうなるものか・・・想像できないんです・・)
●改善の案その3:
以下のように非連結OLEオブジェクト(使用可能はい、ロックいいえ)にしてみて、
以下プログラム作成しても、やはり、同じ色になってしまうようです。
Private Sub 非連結01_AfterUpdate()
If Not IsNull(Me.txtP01) Then
Me.非連結01.OLETypeAllowed = 1
Me.非連結01.SourceDoc = Me.txtP01
Me.非連結01.Action = 0
End If
End Sub
Private Sub Form_Current()
If Not IsNull(Me.txtP01) Then
Me.非連結01.OLETypeAllowed = 1
Me.非連結01.SourceDoc = Me.txtP01
Me.非連結01.Action = 0
End If
End Sub
外部ファイルを読み込み、帳票フォームに対してレコード毎に色を区別できる
プログラム表現方法を何度も繰り返して検討してもなかなか進まない状況です。
ご助言、お力、ご教授頂けたら願えたらありがたいです。
☆の部分について、オブジェクト挿入→新規作成、ビットマップイメージ選択を、
VBAで表現する方法をヘルプで探しても見つからないので、分かる方はご教示頂けたら
ありがたいです。
|
|