Kontrolka Image – Relatywne ścieżki do obrazków

Wstęp

Jak pisałem ostatnio dość mocno eksploatowałem obrazki które chciałem umieszczać na formularzu, aby nie przeciążać formularzy ich przechowywaniem, postanowiłem że umieszcze je nie jako osadzone, a zalinkowane. Stworzyłem folder Icons w katalogu z plikiem bazy, wgrałem potrzebne zdjęcia i zalinkowałem na formie.

Problem

Z dużym zdziwieniem stwierdziłem, że taki link jest problematyczny, ponieważ baza może być uruchamiania w różnych konfiguracjach i katalogach, więc optymistycznie założyłem, że chłopaki z Redmont przewidzieli taką sytuacje i można relatywnie wskazywać obrazki. Jak to bywa: nie przewidzieli.

Rozwiązanie

Rozwiązanie jakie zastosowałem wydaje mi się najprostsze z możliwych:
1. W projekcie formularza umieszczam puste obrazki.
2. Zamiast linku do pliku do własciwości Metka wpisuje coś takiego: $path\icons\lookup.png
3. W module tworzę procedurę z takim kodem:

Public Image2114Err as Boolean

Sub LinkImage(frm As Form)
    Dim p           As String
    Dim C           As Control
    On Error GoTo BLAD

    p = CurrentProject.path
    For Each C In frm.Controls
        If C.ControlType = acImage Then
            If C.Tag <> "" Then
                If dir(Replace(C.Tag, "$path", p)) <> "" Then
                    C.Picture = Replace(C.Tag, "$path", p)
                    C.PictureType = 1
                End If
            End If
        End If
    Next
    Exit Sub
BLAD:
    If Err.Number = 2114 And Not Image2114Err Then
        Image2114Err = True
        MsgBox "Błąd załadowania elementów graficznych formularza!" & vbNewLine & "Prawdopodobna przyczyna to brak zainstalowanych filtrów grafiki!", vbInformation + vbOKOnly, "Błąd"
    End If
End Sub

4. Do zdarzenia przy załadowaniu formularza dochodzi jedna linijka:

LinkImage Me

Podsumowanie

W uproszczeniu, procedura
– szuka na formularzu kontrolek obrazka z wypełnioną właściwością Metka
– podmienia ciąg $path na własciwość CurrentProject.path (która zwraca ścieżkę z której odpalona jest baza i sprawdza czy dany plik istnieje
– jeżeli istnieje to linkuje obrazek
Jedyny błąd jaki sprawdzam to ten opisany w poprzednim poście.
Ustawiam też zmienną publiczną Image2114Err po wystąpieniu błędu na True, aby pokazać taki błąd tylko raz.
Reszta błędów mnie nie interesuje, grafika na formie nie jest szczególnie krytyczna….

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera
Skip to toolbar