はじめに。
先週、TreeView ControlでAccessプロジェクトメニューを作成しました。ご使用のバージョンのMicrosoftAccessで、ご自身で作成して実行できることを願っています。 Access 2007で作成され、ダウンロード用に次の投稿に添付されたデモデータベースがあります。その記事へのリンクを以下に示します:
- ツリービューコントロールを使用したアクセスメニューの作成
データベースをダウンロードして、上記のトピックに関連する新しいVBAコードを追加し、同じデータベースで試すことができます。
これは前の記事の続きであり、画像をノードに割り当てて学習するには、同じデモアクセスメニュープロジェクトが必要です。
TreeViewコントロールのMS-Officeバージョンの問題。
ご使用のバージョンのMicrosoftAccessでデモデータベースを実行する際に問題が発生した場合は、次のリンクを参照して、問題の解決に役立つ可能性のある修正アクションを確認してください。
- 解決済みのMSCOMCTL.OCXダウンロードレジスタ64ビットウィンドウ
サンプルデモ画像。
アクセスプロジェクトメニューを完了すると、画像が表示されます ノード上の画像は以下のようになります:
オプションで、各ノードに2つの画像を割り当てることができます。 1つの画像は通常の状態で表示され、ノードがクリックを受信すると別の画像が表示されます。
ここでは、ルートレベルのノードにクローズドフォルダーを割り当てました。 通常表示の画像とOpen-Folder-like ノードがクリックを受信すると画像が表示されます。
同様に、子ノードには、通常のビューでは左側を向いた鏃頭の画像と、ノードが選択されたときに表示される右を向いた鏃頭の画像があります。
両方(通常とクリックイベント)に同じ画像を使用して、両方のインスタンスで同じ画像を変更せずに維持することができます。これらの2つのパラメータのいずれかを使用する場合、たとえば、通常表示パラメータのみを使用し、2番目のパラメータを省略すると、ノードクリックでは画像が表示されません。
ノードの理想的な画像サイズ。
画像形式は、 .bmpなどの一般的な画像タイプにすることができます。 、 .jpg 、 .jpeg 、 .ico 、 .tiff など。Googleで検索すると、たくさんのアイコン画像を見つけることができます。ノードで見栄えのする理想的な画像サイズは、 16x16ピクセルです。 。 ImageList コントロールには、 16 x 16のようなプリセットの画像サイズ値があります 、 32 x 32 、 48 x 48 ピクセル、およびカスタムサイズ 選択できるオプション。
より高い画像サイズオプション32x32または48x48ピクセルは、より大きな画像を表示し、ツリービューディスプレイでより多くのスペースを占有します。
さまざまな画像サイズのノードグラフィックス。
以下のサンプル画像は、 32x32ピクセルを示しています サイズアイコン:
ノード画像サイズ48x48ピクセルのTreeViewコントロール :
カスタムを使用する場合 画像オプションを選択すると、提供された実際の画像サイズが変更なしで表示されます。
画質とサイズに関する考慮事項。
画像サイズ16x 16を使用しました 上記の最初のサンプル画像。 512 x 512 のように、48x48より大きいカスタム画像サイズをアップロードする場合 ピクセル以上で、オプション 16 x 16を使用します サイズは指定された解像度に縮小されますが、画像の鮮明度が低下または歪むことになります。
最善のアプローチは、16 x 16ピクセルの解像度(キャンバスサイズ)に収まる高品質の小さな画像を見つけることです。画像の品質なしで、16x16ピクセルまたはカスタム設定の両方で機能します。
さまざまな画像タイプ、サイズ、品質を試して、完成する前に試運転を行うことができます。 MS-Paint、またはお持ちの画像編集プログラムを使用して、お好みに合わせて画像を作成/インポートおよび編集できます。
先に進む前に、さらに4つ以上の小さな画像を作成し、データベースフォルダに保存します。それらをImageListコントロールにアップロードし、Nodes Add()メソッドの最後の2つのパラメーターを変更して、TreeViewControlで試してください。
デモデータベースをダウンロードできます: ProjectMenu.accdb 、以前の記事ページから。
試運転の準備をします。
-
ProjectMenu.accdbを開きます データベース。
-
フォームのコピーを作成するfrmMenu frmMenu2という名前を付けます 後で使用できるように保管してください。
-
frmMenuを開きます デザインビューで。
-
ActiveXコントロールを選択します オプション、コントロールから ボタングループをクリックし、ファイル Microsoft ImageList Controlを見つけます [OK]をクリックします ImageListを挿入します コントロールし、ドラッグして、フォームの空の領域の任意の場所に配置します。
ImageListを使用したフォーム デザインビューで強調表示されているコントロールは、参照用に以下に示されています:
-
プロパティシートを表示し、名前を変更します ImageList0へのプロパティ値 。
-
ImageListコントロールを右クリックし、ImageListCtrlオブジェクトを強調表示します。 表示されたメニューのオプションを選択し、プロパティを選択します コントロールの画像設定プロパティシートを表示します。
-
16 x 16を選択します 一般の画像サイズのラジオボタン タブ。ノードに3つの画像サイズのうち最小のものが必要であることを示します。ここでの設定は、ImageListコントロールに追加するすべての画像に有効になります。
-
適用をクリックします コマンドボタンをクリックしてからOK ボタンをクリックしてプロパティシートを閉じます。
まず、必要な画像を ImageListに追加する必要があります ツリービューコントロールで使用する前にコントロールします。
画像読み込みのアプローチ。
追加するのは簡単な方法と難しい方法があります ImageListコントロールへの画像。簡単な方法はVBAコードなしで機能し、他の方法はVBAを必要とします。最初にVBAを使用するのは難しい方法で、次に簡単な方法を試してみます。これにより、コードを使用する場合と使用しない場合の違いがわかります。 VBAベースの方法は、ノードで見栄えのするものを完成させる前に、さまざまな画像やサイズで実験するのに適しています。
ImageListオブジェクトのAdd()を使用します ツリービューデータをノードに追加する場合と同様に、画像をコントロールに追加する方法。このようにして、ImageListコントロールにいくつかの画像を追加し、実行時にそれらを使用します。
ImageListコントロールのAdd()メソッドの構文は次のとおりです。
ObjImgList.ListImages.Add([Index],[Key],[Picture]) As ListImage
最初の2つのパラメーターはオプションです。 3番目の引数はLoadPicture()を使用します 指定した場所から画像を開いてリストに追加する機能。関数パラメーターは、画像ファイルのパス名です。すべての画像ファイルは、配置された順序でImageListオブジェクトに次々に追加されます。インデックス値は、 1から始まる連続した番号で自動的に生成されます (1)以降。
すべての画像をImageListオブジェクトに追加した後、オブジェクト 参照は、ツリービューコントロールのImageListプロパティに渡す必要があります 。
VBAコード。
上記のメニューの画像を読み込むためのサンプルVBAコードを以下に示します。
Dim tvw As MSComctlLib.TreeView Const KeyPrfx As String = "X" Dim objimgList As MSComctlLib.ImageList Private Sub CreateImageList() Dim strPath As String 'TreeView Object reference set in tvw Set tvw = Me.TreeView0.Object 'Clear the Tree View Nodes, if any. tvw.Nodes.Clear 'ImageList Object reference set in objimglist Set objimgList = Me.ImageList0.Object strPath = CurrentProject.Path & "\" With objimgList.ListImages 'Key Names are Case sensitive. .Add , "FolderClose", LoadPicture(strPath & "folderclose2.jpg") .Add , "FolderOpen", LoadPicture(strPath & "folderopen2.jpg") .Add , "ArrowHead", LoadPicture(strPath & "arrowhead.bmp") .Add , "LeftArrow", LoadPicture(strPath & "LeftArrow.bmp") .Add , "RightArrow", LoadPicture(strPath & "RightArrow2.bmp") End With With tvw .ImageList = objimgList End With End Sub
この手順を完了すると、ツリービューノードに画像を簡単に追加できます。
TreeViewノードのAdd()メソッドと画像パラメータ。
ツリービューオブジェクトAdd() メソッドの最後の2つのパラメータは、ノードイメージ用です。 TreeViewオブジェクトノードのAdd()メソッドの構文をもう一度見てみましょう:
tvw.Nodes.Add([Relative],[Relationship],[Key],[Text],[Image],[SelectedImage]) As Node
最後の2つのパラメーターは、ノードイメージ用です。最初の画像パラメータはノードの通常のビュー用であり、2番目の画像はノードが選択されたときに表示されます。 [画像] および[SelectedImage] 値は、ImageListインデックス番号のいずれかです。 またはキー- 価値。
CreateImageList() サブルーチンは、ImageListコントロールに5つの画像を追加します。最初の2つの画像のうち、最初の画像( FolderClose )はルートレベルノードの通常ビュー用で、2番目のビュー( FolderOpen )用です )ルートレベルのノードを選択すると画像が表示されます。
最後の2つの画像は、子ノードの通常のビューとクリックイベントアクションに使用されます。
ArrowHead 画像は無視されます。
変更を加えたFormLoad()イベントプロシージャ。
変更されたFormLoad() イベントの手順を以下に示します。
Private Sub Form_Load() Dim db As Database Dim rst As Recordset Dim nodKey As String Dim PKey As String Dim strText As String Dim strSQL As String Dim tmpNod As MSComctlLib.Node Dim Typ As Variant '1. Initializes TreeView Control Object '2. Creates ImageList in ImageListObject CreateImageList With tvw .Style = tvwTreelinesPlusMinusPictureText .LineStyle = tvwRootLines .LabelEdit = tvwManual .Font.Name = "Verdana" .Indentation = 400 End With strSQL = "SELECT ID, Desc, PID, Type,Macro,Form,Report FROM Menu;" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL, dbOpenDynaset) Do While Not rst.EOF And Not rst.BOF If Nz(rst!PID, "") = "" Then nodKey = KeyPrfx & CStr(rst!ID) strText = rst!desc Set tmpNod = tvw.Nodes.Add(, , nodKey, strText, "FolderClose", "FolderOpen") 'Root-Level Node Description in Bold letters With tmpNod .Bold = True End With Else PKey = KeyPrfx & CStr(rst!PID) nodKey = KeyPrfx & CStr(rst!ID) strText = rst!desc Set tmpNod = tvw.Nodes.Add(PKey, tvwChild, nodKey, strText, "LeftArrow", "RightArrow") 'Check for the presense of Type Code If Nz(rst!Type, 0) > 0 Then Typ = rst!Type Select Case Typ Case 1 'save type Code & Form Name in Node Tag Property tmpNod.Tag = Typ & rst!Form Case 2 'save type Code & Report Name in Node Tag Property tmpNod.Tag = Typ & rst!Report Case 3 'save type Code & Macro Name in Node Tag Property tmpNod.Tag = Typ & rst!Macro End Select End If End If rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing End Sub
Add() TreeViewノードのメソッド行 上記のVBAコードで強調表示されているのは、画像のキー 文字列パラメータ値は、画像の通常ビューとクリックビューの両方に挿入されます。
または、画像インデックス値 1、2を使用することもできます ルートレベルのノード、およびインデックス番号 4、5 子ノードの場合。
値を変更して、自分で試してみてください。
すべての変更と追加の画像読み込み手順を含む新しいデモデータベースが添付されており、ダウンロードできます。
注: 別の場所に画像を保存する場合は、上記で説明したように、独自の試運転用に4つの新しい画像を作成し、上記のコードの画像名と場所のアドレスを変更します。
次に、画像を使って簡単な方法を試し、画像をあなたと共有します。
ダウンロード用のサンプルデータベース。
- MS-AccessとEメール
- Access2007からWord-Mailマージを呼び出す
- 自動メールアラート