Image Control verbergen

Status
Niet open voor verdere reacties.

MrDummy

Gebruiker
Lid geworden
16 mei 2015
Berichten
35
Hallo,

In een Form heb ik een plaatje. Het plaatje is "ingeschakeld" zodat wanneer ik er op klik en uitvergroting van het plaatje verschijnt. Maar nu is ook de "paperclip" beschikbaar (zie bijlage) die boven het plaatje verschijnt. Wanneer ik op de paperclip klik dan opent zich een snelmenu. Toevoegen en verwijderen heb ik al uit staan , maar opslaan, alles opslaan etc blijven beschikbaar.

Probleem is dat ik graag van die paperclip af wil. Dus dat deze helemaal niet beschikbaar komt.

Ik kan het plaatje zelf "uitschakelen" maar dan is de "klik" optie ook niet meer beschikbaar terwijl ik die juist wel beschikbaar wil houden.

Picture.jpg
 
Je hebt de afbeelding zeker als bijlage in de db opgeslagen? Begin eens met dat niet te doen maar alleen afbeeldingen op te slaan in tekstvelden. Niet alleen veel beter voor je db (die blijft namelijk veel kleiner) maar je bent ook van dit probleem af.
 
Klopt als een bus. Deze staan inderdaad in de database als bijlage. Zijn relatief kleine bestanden (tussen de 8Kb en 15kB).:)

Nu is het zo dat de afbeelding dynamisch is dus wanneer ik een record selecteer dan verandert het plaatje ook. Ik ga de optie van tekst bestand proberen maar snel een vraag: heeft dit ook invloed op het laten zien van het plaatje als ik een ander record selecteer of blijft dit hetzelfde?
 
Zijn relatief kleine bestanden (tussen de 8Kb en 15kB).:)
Vertel dat maar aan Bil....

Nu is het zo dat de afbeelding dynamisch is dus wanneer ik een record selecteer dan verandert het plaatje ook.
Lijkt mij logisch, en in mijn systeem gebeurt dat uiteraard ook. Het enige dat je doet is het plaatje koppelen aan een image object in een formulier/rapport en op het moment dat je het record selecteert wordt het object ververst.
 
Dank je voor de hulp. Het heeft volgens mij ook nog een stukje VBA nodig bij het Form_Current of Form_AfterUpdate.

Echter het ".Picture" kent hij niet en komt met de melding "kan de methode of gegevenslid niet vinden". .PictureAlignment ; .PictureSize etc kent ie wel. Maar bij alleen >Picture snapt ie het niet.:(

De Code die ik gebruik zou toch moeten werken. Label1 is de naam van het vak waar het plaatje in moet verschijnen en Label1UN is de Padnaam. Als ik de padnaam (Label1UN) laat zien in het form dmv een tekstvak dan geeft hij de juiste padnaam en verandert met de selecteren van het record. Dus dat lijkt goed te gaan. Zit dus met de foutmelding.

Code:
Private Sub Form_Current()

Label1.Picture = Label1UN '.Picture wordt geel gearceerd

End Sub
 
Laatst bewerkt:
Om te beginnen zou ik, als ik jou was, een andere naamstelling aanleren. Een label is een bijschrift bij een object, zoals een tekstvak, nooit een object zelf. Ook al mag het, als je een object gaat benoemen als een ander type object, dan weet straks niemand meer naar welk soort object je zit te kijken. Waarom dat object niet gewoon objPicture genoemd? Dan weet je te allen tijde exact wat het is! Nogmaals: zolang je geen gereserveerde namen gebruikt mag van Access alles, maar waarom jezelf al op voorhand tekort doen?

Het heeft volgens mij ook nog een stukje VBA nodig bij het Form_Current of Form_AfterUpdate.
Daar heb je gelijk in; AfterUpdate overigens is in dat opzicht onbruikbaar, maar Current is de juiste weg. Ik heb zelf een formulier met op een tabblad plaats voor 12 foto's. Op dat blad staan dus 12 Imagecontrols, 12 labels (die als knop werken), 12 velden met de naam van de afbeelding en 12 knoppen om de afbeeldingen te verwijderen. In een lusje loop ik daar doorheen om foto's per record in te lezen. Die code ziet er zo uit:
Code:
Sub FotoInlezen()
    Dim res As Boolean
    Dim fName As String, fNameKaart As String
    Dim sPlaatje As String, sLabel As String, sPad As Variant
    
    Path = CurrentProject.Path
    '-------------------------------------------------------------------------------------------------
    'In een loop de 12 foto's koppelen
    '-------------------------------------------------------------------------------------------------
    For i = 1 To 12
        If Not Nz(Me("KaartPad" & i)) = "" Then
            Me("lblKaart" & i).Visible = False
            Me("cmd" & i).Visible = True
            res = IsRelative(Me("KaartPad" & i))
            fNameKaart = Me("KaartPad" & i)
            If (res = True) Then
                fNameKaart = Path & "\" & fNameKaart
            End If
            On Error GoTo Foutje
            Me("picKaart" & i).Picture = fNameKaart
            Me("picKaart" & i).Visible = True
            Me.PaintPalette = Me("picKaart" & i).ObjectPalette
            If (Me("picKaart" & i).Picture <> fNameKaart) Then
                Me("picKaart" & i).Visible = False
                Me("lblKaart" & i).Caption = "Kaart niet gevonden"
                Me("lblKaart" & i).Visible = True
            End If
        Else
            Me("picKaart" & i).Visible = False
            Me("lblKaart" & i).Caption = "Klik om Nieuwe kaartafbeelding toe te voegen"
            Me("lblKaart" & i).Visible = True
            Me("cmd" & i).Visible = False
        End If
    Next

Exit Sub

Foutje:
    If Err.Number = 2001 Then
        DoEvents
        DoEvents
        DoEvents
    Else
        MsgBox Err.Number & vbLf & Err.Description
    End If
    Resume Next

End Sub

En start je dus vanuit het formulier:
Code:
Private Sub Form_Current()
Dim rs As DAO.Recordset

    strSQL = "SELECT AdminID, FotoPad FROM tAfbeelding WHERE AdminID = " & Me.AdminID
    Set rs = CurrentDb.OpenRecordset(strSQL)
    With rs
        If .RecordCount > 0 Then
            FotoInlezen
        End If
    End With
End Sub

Ik heb er een plaatje bijgedaan, zodat je kan zien hoe dat er uit ziet.
image002.jpg
 
Hoi,

Dank je voor de input en ik ben eruit. Is/Was een goede hulp. Ik heb alleen het volgende (en het werkt hoor!!!:cool:) maar vraag me af of er geen makkelijkere manier is:

De records worden opgezocht en bij sommige records zit 1 plaatje en bij andere 2 plaatjes. Wanneer ik de onderstaande code draai wordt het tweede plaatje netjes leeggemaakt wanneer er geen tweede plaatje is. Wanneer ik dit niet doe dan blijft het tweede plaatje staan ondanks dat er geen pad is voor het tweede plaatje.

Code:
Private Sub Form_Current()
Dim GetDBPath As String

GetDBPath = CurrentProject.Path
   
      Me.ObjPicture1.Picture = GetDBPath & Me.LinkPicture1

  If IsNull(Me.LinkPicture2) Then

       Me.ObjPicture2.Picture = ""

       Else

       Me.ObjPicture2.Picture = GetDBPath & Me.LinkPicture2

   End If
 
Het kan niet heel veel korter, en sneller of handiger wordt het er niet van. Al ben je, gezien de lege regels, niet benauwd voor een scrollarm :). Blijkbaar begin je de naam van de foto met de backslash; ik doe dat liever niet omdat je bij het uitlezen van een bestandsnaam ook geen slash meekrijgt. Ik zou er nog een regel aan toevoegen:
Code:
    GetDBPath = CurrentProject.Path & "\"
    Me.ObjPicture1.Picture = GetDBPath & Me.LinkPicture1.Value
    If Me.LinkPicture2.Value = vbNullString Then
       Me.ObjPicture2.Picture = ""
    Else
       Me.ObjPicture2.Picture = GetDBPath & Me.LinkPicture2
   End If
   Me.ObjPicture2.Visible Not (Me.LinkPicture2.Value = vbNullString)
 
Hoi,

Dank je voor de toelichting. Inderdaad is het misschien handiger om de "" op die manier toe te voegen.

Nu gaat het goed op de individuele records. Ik heb nog een Hoofdformulier (datasheet view) en een subformulier die de plaatjes laat zien elke keer als je een record in het hoofdformulier aanklikt. Hier is het wel zo dat het aantal plaatsjes per aangeklikte record verandert. Soms is het er 1 en soms zijn het meerdere. in theorie zouden het er oneindig veel kunnen zijn. In de praktijk is het beperkt tot ongeveer 10.

Dat is dan de volgende uitdaging maar zie wel een gelijkenis met bovenstaande. Ik hou deze nog even open.
 
Laatst bewerkt:
Dat is dan de volgende uitdaging maar zie wel een gelijkenis met bovenstaande.
In mijn voorbeeldje heb ik 12 thumbnails op het formulier staan, die dus gevuld worden met de code die ik hierboven heb neergezet. Bij klikken op een thumbnail krijg je dan een popup formulier waarin de afbeelding normaal te bekijken is. Daar dan weer op klikken sluit de popup.
In eerste instantie is die opzet dus prima geschikt voor 10 plaatjes. Als het er meer dan 12 zijn, kun je uiteraard met recordsets gaan werken die dan elke keer 12 afbeeldingen pakken. Kun je oneindig veel plaatjes gebruiken op hetzelfde formulier.
 
Hoi,

Dank je voor de input. Natuurlijk even puzzelen en aanpassen naar de eigen wensen maar nu helemaal goed. :d

Thanks.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan