SubFormのControl背景色 --- 皆さんの工夫をまとめました
お助け板に帳票形式サブフォームである条件の時だけコントロール背景色を変えるなどして強調させたいという質問が有りました。
サブフォームのコントロルプロパティーなどのデザイン部分は1レコード分のコピーが行となって並んでいるに過ぎないんで、1つのコントロールの背景色プロパティーを赤に変更すればそのコントロールは上から下まで全部赤が並ぶ事になってしまいます。
だってデザイン画面で作る時、一行分しか作ってないでしょ?
そのコピーされた枠の中に各レコードのデータだけをはめ込んでいる訳ですよ!
マイクロソフトの姑息な手段・手抜きですよね!
という訳で個別にプロパティーを設定する事は不可能なんです。
それでもやりたい!
と皆さんくふうしてるのでここにまとめてご紹介します。出てくる人:
ロトさん-------質問者
にわとりさん---お助け板の常連
ニキータさん---お助け板回答者(プロのインストラクター)
Penオヤジ----もの好きおじん
工夫は2種類有ります。
ダウンロード 33_sub.exe (47KB)
その1
フォーカスが有る時だけコントロールの背景色が変わるというもの。
こんな具合ですね!
こいつのミソはコントロールの背景色を決めているのに背景スタイルで透明にしてしまうというところ!
これはニキータ案。
私もニキータさんの説明を聞く前にいじってるうちに発見してしまったんですが・・・・
ツールバーのアイコンででも良いけれど、コントロールの背景色を設定すると背景スタイルは自動的に「普通」に設定されてしまいます。
それを強引に(そういう訳でも無いけど・・・)透明に変更してしまうんでよ!
すると普通の状態では透明でフォーカスが来た時だけ背景色が生きてくるという原理です。
透明では何かと都合が悪いという時は土台となる詳細セクションに色をつけるとか、コントロールと同じ大きさでスペースを1こ入れたラベルの背景色を好きな色にしてコントロールの下に敷くわけです。
最背面へ移動を使うわけですね。
応用のような感じになりますがごく普通のフォーム上に有るコントロールでもこの技は使える訳で、フォーカスが来ると背景色が変わって強調表示できます。
プロパティーで背景色を設定するより簡単ですね!
その2
次はにわとり案です。
デザイン的なプロパティーは共通のものとして表示されるがデータであれば個々のレコードの値として独立表示できる事に目を付けています。
上の例最下段の3つの枠は
・評価="安い"の時だけ★を付ける
・評価に何か記入されている時は品名のバックに赤い斜線を引く
・値段が500円以下のものだけバックに色を付ける
という説明です。
解りにくいのでデザイン画面で縦にずらしてみましょう。
下の図で実際には縦の3つが一つに重なっている訳ですね。
ばらしたままフォーム画面で見ると下のように見えます。
つまりデータの背景は透明で下に置かれた、実際には背景となる非連結コントロールにIIf を使って値を値を代入しているんです。
代入した値はレコード固有のデータですからレコード毎に別のものとして表示できる訳です。
赤い斜線のコントロールソースは
=IIf(Not IsNull([評価]),String(20,"/"))
[評価]というフィールドに何かデータが有ればスラッシュを20個書く訳です。
20個という数字に特に意味は無くそのコンとーロールが文字で埋まれば良いんで、多すぎても只はみ出した部分は表示されないというだけなので一向に構いません。
データが無ければ何も文字は有りませんから白無地のバックですね。
次、その上の★ですが、同じようにIIfを使って"安い"というデータの時は"★"を代入している訳で、コントロールを重ねて表示できるんだという例です。
次、「値段」の所です。
同じように"■"を並べて表示すると間があいて塗りつぶしのバックに見えませんね?
にわとりさんは■を一つだけ使い文字フォントを大きくして上の方だけ使って背景のように見せています。
■
たぬき
上のように大きな■とデータを重ねる訳ですね。
この場合は■の廻りに余白があるので一行の高さを少し大きくしてデータを下に下げる必要が出てきます。
Penおやじ案として
■■■■■■ =IIf([値段]<=500,String(10,"■"))
■■■■■■ =IIf([値段]<=500," " & String(10,"■"))
という具合に先頭にスペースを挟んでズラしたものを重ねてしまい一本の棒のように見せようという方法です。
この場合は比較的小さなフォントで済むため上部の余白は少なくする事が出来ます。
要するに背景色/透明を駆使し、データを材料に使って背景を作ってしまうという事なんですね。
何か面白いアイデアがありましたらお助け板でお知らせ下さい。
ActiveX
ついでですからActiveXのフレキシブルグリッドを紹介しておきます。
Microsoft FlexGrid Control 5.0
これはVisualBasicのProfessional Edition以上を持っていないと使用する権限がありません。
何ができるのか?
OLE機能を利用してExelをAccessの画面に貼り付ける事はできますが実際の利用ではダブルクリックでExelを呼び出さねばならずサブフォーム代用として使うには役不足です。
その点このフレキシブルグリッドは1つのコントロールですからAccessの画面で自由に通常のコントロールと同じに扱う事ができる訳です。
機能としてはExelの表を切り取ってきたものと考えて良いでしょう。
しかしExelの表で使えるデフォルトの機能は一切付いていませんから全部自分でスクリプト操作しなければ何も表示されません。
Tableのデータをリンクする事はできます。
正にAccessの泣き所を補ってくれる十分な機能を発揮できます。
シマシマフォームだってこの通り!
でも並みの知識じゃここまでできませんよ!
これは私が作ったわけじゃなくて
SOFTBANK社 笠原一浩著 VisualBaasic5.0入門 活用編
のサンプルです。
こんなのがAccessでも自由に作れるようになると良いですねぇ〜!
お金が有り余っている人は使いやすくしたOCXが市販されていますからそれを使えば簡単でしょう。