sql >> データベース >  >> RDS >> Access

ツリービューノードへの画像の割り当て

    はじめに。

    先週、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 、以前の記事ページから。

    試運転の準備をします。

    1. ProjectMenu.accdbを開きます データベース。

    2. フォームのコピーを作成するfrmMenu frmMenu2という名前を付けます 後で使用できるように保管してください

    3. frmMenuを開きます デザインビューで。

    4. ActiveXコントロールを選択します オプション、コントロールから ボタングループをクリックし、ファイル Microsoft ImageList Controlを見つけます [OK]をクリックします ImageListを挿入します コントロールし、ドラッグして、フォームの空の領域の任意の場所に配置します。

      ImageListを使用したフォーム デザインビューで強調表示されているコントロールは、参照用に以下に示されています:

    5. プロパティシートを表示し、名前を変更します ImageList0へのプロパティ値 。

    6. ImageListコントロールを右クリックし、ImageListCtrlオブジェクトを強調表示します。 表示されたメニューのオプションを選択し、プロパティを選択します コントロールの画像設定プロパティシートを表示します。

    7. 16 x 16を選択します 一般の画像サイズのラジオボタン タブ。ノードに3つの画像サイズのうち最小のものが必要であることを示します。ここでの設定は、ImageListコントロールに追加するすべての画像に有効になります。

    8. 適用をクリックします コマンドボタンをクリックしてから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つの新しい画像を作成し、上記のコードの画像名と場所のアドレスを変更します。

    次に、画像を使って簡単な方法を試し、画像をあなたと共有します。

    ダウンロード用のサンプルデータベース。


    1. MS-AccessとEメール
    2. Access2007からWord-Mailマージを呼び出す
    3. 自動メールアラート


    1. SQLサーバーにファイルが存在するかどうかを確認しますか?

    2. T-SQL分割文字列

    3. MariaDBで利用可能な照合を取得する3つの方法

    4. SQLiteでワードラップを有効にする2つの方法