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….
0 Comments.