sql >> Database >  >> RDS >> Access

Afbeeldingen toewijzen aan structuurweergaveknooppunten

Inleiding.

Vorige week hebben we Access Project Menu op TreeView Control gemaakt en ik hoop dat je het zelf hebt kunnen maken en uitvoeren in je versie van Microsoft Access. Er is een demodatabase, gemaakt onder Access 2007 en als bijlage toegevoegd aan de volgende post om te downloaden. De link naar dat artikel wordt hieronder gegeven:

  • Toegangsmenu maken met Tree View-bediening

U kunt de database downloaden zodat u de nieuwe VBA-code die betrekking heeft op het bovenstaande onderwerp kunt toevoegen en deze in dezelfde database kunt uitproberen.

Dit is de voortzetting van het eerdere artikel en we hebben hetzelfde Demo Access Menu Project nodig om afbeeldingen aan knooppunten toe te wijzen en te leren.

Problemen met de MS-Office-versie voor TreeView Control.

Als u problemen had met het uitvoeren van de demodatabase in uw versie van Microsoft Access, kunt u de volgende link raadplegen voor enkele corrigerende acties, die nuttig kunnen zijn om uw probleem op te lossen:

  • OPGELOST MSCOMCTL.OCX DOWNLOAD REGISTREREN 64 BIT WINDOWS

Voorbeeld demo-afbeelding.

Wanneer we ons Access Project-menu voltooien, met Afbeeldingen op Nodes ziet eruit als de onderstaande afbeelding:

Optioneel kunnen we twee afbeeldingen aan elk knooppunt toewijzen. Eén afbeelding wordt weergegeven in een normale staat en een andere wordt weergegeven wanneer de node een klik ontvangt.

Hier hebben we de Root-level Node toegewezen met de Closed-Folder Afbeelding voor normale weergave en de Open-Folder-achtige De afbeelding zal verschijnen wanneer de node een klik ontvangt.

Evenzo hebben de onderliggende knooppunten een afbeelding met een pijlpunt, die naar links is gericht, in de normale weergave, en een afbeelding met een pijlpunt, die naar rechts wijst, wordt weergegeven wanneer het knooppunt is geselecteerd.

U kunt dezelfde afbeelding voor beide gebruiken (normaal en voor klikgebeurtenis), zodat dezelfde afbeelding in beide gevallen ongewijzigd blijft. Als u een van deze twee parameters gebruikt, bijvoorbeeld alleen de parameter Normal View gebruiken en de tweede weglaten, zal de Node-klik geen afbeelding weergeven.

Ideale afbeeldingsformaten voor knooppunten.

Het afbeeldingsformaat kan van elk algemeen afbeeldingstype zijn, zoals .bmp , .jpg , .jpeg , .ico , .tiff enz. U kunt tal van Icon-afbeeldingen vinden door te zoeken op Google. De ideale afbeeldingsgrootte, die er goed uitziet op de Node, is 16 x 16 pixels . De ImageList Control heeft vooraf ingestelde waarden voor afbeeldingsgrootte, zoals 16 x 16 , 32 x 32 , 48 x 48 pixels en Aangepast formaat Opties om uit te kiezen.

Opties voor grotere afbeeldingsgrootte 32 x 32 of 48 x 48 pixels geven grotere afbeeldingen weer en nemen meer ruimte in beslag op de Tree View-weergave.

Knooppuntafbeeldingen met verschillende afbeeldingsformaten.

De volgende voorbeeldafbeelding hieronder toont 32 x 32 pixels maat Icoon:

TreeView-besturing met knooppuntbeeldgrootte 48 x 48 pixels :

Als u liever Aangepast gebruikt Afbeeldingsoptie, dan wordt de werkelijke afbeeldingsgrootte ongewijzigd weergegeven.

Overwegingen voor beeldkwaliteit en grootte.

We hebben afbeeldingsgrootte 16 x 16 gebruikt in het eerste voorbeeld Afbeelding hierboven. Als we een aangepast afbeeldingsformaat uploaden, groter dan 48 x 48, zoals 512 x 512 Pixels of meer en gebruik de optie 16 x 16 het verkleint de grootte tot de gespecificeerde resolutie, maar de helderheid van het beeld wordt verminderd of vervormd.

De beste aanpak is om kleine afbeeldingen van goede kwaliteit te vinden, die passen in de resolutie van 16 x 16 pixels (canvasformaat). Het werkt zowel met 16 x 16 pixels als met aangepaste instellingen, zonder de kwaliteit van de afbeelding.

U kunt experimenteren met verschillende soorten afbeeldingen, formaten en kwaliteit, en proefdraaien voordat u het definitief maakt. U kunt MS-Paint of welk ander beeldbewerkingsprogramma dan ook gebruiken en afbeeldingen naar uw wens maken/importeren en bewerken.

Maak voordat u verder gaat vier of meer kleine afbeeldingen en sla deze op in de databasemap. Upload ze naar het ImageList-besturingselement en probeer ze in het Tree View-besturingselement door de laatste twee parameters van de Nodes Add()-methode te wijzigen.

U kunt de demodatabase downloaden:ProjectMenu.accdb , van de eerdere artikelpagina.

Bereid je voor op de proefrun.

  1. Open het ProjectMenu.accdb database.

  2. Maak een kopie van het formulier frmMenu en noem het als frmMenu2 en bewaar het voor later gebruik.

  3. Open frmMenu in ontwerpweergave.

  4. Selecteer ActiveX-besturingselementen Optie, via de Controls Button Group en zoek het bestand Microsoft ImageList Control en klik op OK om een ​​ImageList in te voegen controle, sleep en plaats het ergens in het lege gebied op het formulier.

    Formulier met ImageList Het besturingselement dat in de ontwerpweergave is gemarkeerd, wordt hieronder ter referentie gegeven:

  5. Geef het eigenschappenblad weer en wijzig de Naam Eigenschapswaarde naar ImageList0 .

  6. Klik met de rechtermuisknop op het ImageList-besturingselement en markeer het ImageListCtrl-object Optie in het weergegeven menu en selecteer Eigenschappen om het eigenschappenblad voor afbeeldingsinstellingen van het besturingselement weer te geven.

  7. Selecteer 16 x 16 afbeeldingsgrootte Keuzerondje op de Algemeen Tab, wat aangeeft dat we de kleinste van de drie afbeeldingsformaten nodig hebben voor de Node. De instelling hier is van kracht op alle afbeeldingen die we toevoegen aan het ImageList-besturingselement.

  8. Klik op Toepassen Command-knop en vervolgens de OK om het eigenschappenvenster te sluiten.

Eerst moeten we de vereiste afbeeldingen toevoegen aan de ImageList Controle voordat we ze kunnen gebruiken in Tree View Control.

Benaderingen voor het laden van afbeeldingen.

Er is een gemakkelijke en een moeilijke manier om Toevoegen Afbeeldingen naar het ImageList-besturingselement. De gemakkelijke manier werkt zonder VBA-code en de andere methode heeft VBA nodig. We gaan eerst de moeilijke weg met VBA en proberen dan de gemakkelijke manier, zodat u het verschil weet, wanneer u code moet gebruiken en wanneer zonder code. Een op VBA gebaseerde methode is goed om te experimenteren, met verschillende afbeeldingen, formaten voordat je definitief maakt wat er goed uitziet op de Node.

We gebruiken Add() . van het ImageList-object methode om afbeeldingen toe te voegen aan het besturingselement zoals we deden voor Tree View-gegevens naar Node. Op deze manier voegen we verschillende afbeeldingen toe aan het ImageList-besturingselement en gebruiken ze tijdens runtime.

De syntaxis van de Add()-methode van ImageList-besturing is als volgt:

ObjImgList.ListImages.Add([Index],[Key],[Picture]) As ListImage

De eerste twee parameters zijn optioneel. Het derde argument gebruikt de LoadPicture() Functie om afbeeldingen vanaf de opgegeven locatie te openen en aan de lijst toe te voegen. De functieparameter is de padnaam van het afbeeldingsbestand. Alle afbeeldingsbestanden worden de een na de ander toegevoegd aan het ImageList-object, in de volgorde waarin ze zijn geplaatst. De indexwaarden worden automatisch gegenereerd, in opeenvolgende getallen vanaf 1 (een) verder.

Nadat alle afbeeldingen aan het ImageList-object zijn toegevoegd, wordt het Object verwijzing moet worden doorgegeven aan de ImageList Property . van het Tree View-besturingselement .

De VBA-code.

De voorbeeld-VBA-code voor het laden van afbeeldingen voor ons menu hierboven wordt hieronder gegeven:

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

Als we eenmaal klaar zijn met deze procedure, is het eenvoudig om de afbeeldingen toe te voegen aan de Tree View Nodes.

TreeView Nodes Add()-methode en afbeeldingsparameters.

Het Tree View-object Toevoegen() De laatste twee parameters van de methode zijn voor de knooppuntafbeeldingen. Laten we nog een keer naar de syntaxis van de TreeView Object Nodes Add()-methode kijken:

tvw.Nodes.Add([Relative],[Relationship],[Key],[Text],[Image],[SelectedImage]) As Node

De laatste twee parameters zijn voor knooppuntafbeeldingen. De eerste afbeeldingsparameter is voor de normale weergave van Node en de tweede afbeelding wordt weergegeven wanneer de Node is geselecteerd. De [Afbeelding] en [SelectedImage] waarden kunnen ofwel het ImageList Indexnummer . zijn of de Sleutel- Waarde.

De CreateImageList() subroutine voegt vijf afbeeldingen toe aan ImageList Control . Van de eerste twee afbeeldingen, de eerste (MapSluiten ) is voor de normale weergave van het knooppunt op rootniveau en de tweede (FolderOpen ) afbeelding wordt weergegeven wanneer het knooppunt op rootniveau is geselecteerd.

De laatste twee afbeeldingen worden gebruikt voor de normale weergave van onderliggende knooppunten en voor de actie Klikgebeurtenis.

De ArrowHead afbeelding wordt genegeerd.

FormLoad()-gebeurtenisprocedure met wijzigingen.

De gewijzigde FormLoad() Gebeurtenisprocedure wordt hieronder gegeven:

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

De Toevoegen() methoderegel van TreeView Nodes is gemarkeerd in de VBA-code hierboven, waar de sleutel Stringparameterwaarden worden ingevoegd voor zowel normale als klikweergaven van de afbeeldingen.

U kunt ook de afbeeldingsindexwaarden 1, 2 . gebruiken voor de knooppunten op rootniveau en indexnummers 4, 5 voor onderliggende nodes.

U kunt de waarden wijzigen en zelf uitproberen.

Een nieuwe demodatabase met alle wijzigingen en aanvullende procedure voor het laden van afbeeldingen is bijgevoegd om te downloaden.

Opmerking: Maak, zoals hierboven uitgelegd, vier nieuwe afbeeldingen voor uw eigen proefruns en wijzig de namen van afbeeldingen en locatieadressen in de bovenstaande code als u de afbeeldingen op een andere locatie opslaat.

Vervolgens zullen we de gemakkelijke methode met de afbeeldingen uitproberen en zal ik mijn afbeeldingen met je delen.

Voorbeelddatabase om te downloaden.


  1. MS-toegang en e-mail
  2. Word-Mail Merge aanroepen vanuit Access2007
  3. Geautomatiseerde e-mailwaarschuwingen


  1. Hoe LOWER() werkt in MariaDB

  2. Hoe een geserialiseerde string te repareren die is beschadigd door een onjuiste byte-tellingslengte?

  3. Verbinding maken met MySQL vanaf de opdrachtregel

  4. Interval converteren naar minuten