PDA

Zobacz pełną wersję : Access - wygląd formularzu



keyra
06-01-08, 17:49
Mam pytanie dotyczące tego, jak zrobić, żeby dany formularz w zależności od danego rekordu przyjmował inny wygląd (w moim przypadku inne tło). Mam baze danych księgarni i chcę żeby do każdego gatunku ksiązki (jest ich ok.20) wyświetlało się inne tło. Jak to zrobić? Czy trzeba robić jakieś tabele, kwarendy, czy od razu dokonac zmiany w formularzu? musze to zrobić do środy

doderic
06-01-08, 21:00
Moga kontynuowa w poprzednim wtku ;)

Aby zmienia to caego formularza musisz uy funkcji Visual Basica.
Najlepiej zrobi to w procedurze obsugi zdarzenia OnCurrent.
Dla formularza, w jego Waciwociach dodajesz zdarzenie "Przy biecym". Wybierasz "[Procedura zdarzenia]" i wciskasz 3kropki.
Aby zmieni to formularza musisz zmieni waciwo Picture dla formularza.
Oto przykadowy kod:

Me.Picture = "C:\Windows\Winlogo.bmp"
"Me" odwouje si wtedy do aktywnego okna formularza.

Wiem, e powysze rozwizanie wymaga troch umiejtnoci, ktre nie kady posiada. W kocu nie kady musi umie i lubi programowa. Tak wic chciabym zaproponowa inne rozwizanie, ktre jednak moe si tobie spodoba.
Na formularz w Accessie mona wstawi kontrolk, ktra nazywa si "Zwizana ramka obiektu". Teraz musisz stworzy tabel, gdzie bdzie jedna kolumna z kategoriami ksiek, a drug z rysunkami (przy projektowaniu tabeli wybierz pole typu Obiekt OLE), i zrobi tak kwerend, eby do kadej ksiki doda rysunek odpowiadajcy danej kategorii. !!Rysunki musz by z rozszerzeniem .bmp!!
Oczywicie to ta kwerenda musi by rdem danych dla formularza, a pole z rysunkiem powi ze "Zwizan ramk obiektu".

Wreszcie moesz uy takiej Zwizanej Ramki jako rysunek obok danych ksiki albo jaka ikonka... a jak si uprzesz, to moesz z tego nawet zrobi to:
rozcignij tylko pole na cay formularz i z menu Format wybierz Przesu na spd.

Jeszcze maa podpowied:
Aby wstawi rysunek do rekordu musisz klikn praw myszk na polu i wybra "Wstaw obiekt", potem zaznacz "Z pliku".

Drugie rozwizanie ma niestety kilka wad - ale pozwol Ci samej je odkry...
Jeeli stwierdzisz, e jest nieakceptowalne, to zapraszam jutro wieczorem na may kurs programowania w VB ;) Tu, na forum lub na skype.

Na koniec zaczam jeszcze may i prosty przykad uywajcy "Zwizanej ramki obiektu". Najlepiej rozpakowa go do katalogu c:\tmpbaza\

keyra
07-01-08, 14:11
Dziki, zastosuj chyba pierwsz metod wydaje mi si atwiejsza..Czyli pracuje nad jednym formularzem, i jak zmieniam rekordy to automatycznie jakbym pracowaa nad nowym tak? Bo jak biore 'projektuj' to jest tylko oglny wzr formularzu, a ja chce eby z danym rekordem zmieniao si to. Moesz to szczegowiej wyjani : ) bde wdziczna.nie mam skype, tylko gg

Aha, jeszcze jedno. Mam jeden formularz w ktrym jest drugi, mniejszy. Jak chc w nim wstawi nowe to to pojawia sie okienko z "object variable or with blovk variable set". jak odblokowa ten formularz?... Bo mog przesuwac w nim wszystko, ale nie moge doda adnego rysunku

doderic
08-01-08, 16:04
1. przygotuj tla dla poszczegolnych kategorii i wgraj pliki do tego samego folderu, gdzie trzymasz swoja baze; przypominam, ze pliki musza miec rozszerzenia .bmp
2. do tabeli "gatunek" dodaj pole "obrazek" typu "Tekst"
3. dla kazdej z kategorii wpisz w "obrazek" nazwe obrazka, np. "sensacyjne.bmp"
4. do kwerendy "gatunek-ksika" dodaj z tabeli "gatunek" nowe pole "obrazek"

W ten sposb masz ju dane potrzebne do zmiany ta, teraz mechanizm. Do kadego formularza, ktry chcesz zmieni, a ktry bazuje na kwerendzie "gatunek-ksika" (bo to, co masz wpisane w rdle danych to jest to samo co kwerenda, wic lepiej bazuj na kwerendzie), dodamy procedur obsugi zdarzenia, a wic kawaek kodu Visual Basic.

5. dodaj do formularza nowe pole "obrazek", ale jako je ukryj (Widoczny=nie)
6. otwrz formularz i poszukaj na jego karcie waciwoci okienka "Przy biecym" (zakadka Zdarzenie). Wpisz tam "[Procedura zdarzenia]" i nacinij na 3kropki.
7. Otworzy si edytor Visual Basic z nowo utworzon procedur "Private Sub Form_Current()". Musisz j zmieni tak, eby przy kadym wywoaniu tej procedury "Picture" formularza zmienia si na warto zapisan w polu "obrazek".
Tak wic funkcja musi wyglda tak:


Private Sub Form_Current()
Me.Picture = Me!obrazek
End Sub

Albo, eby zabezpieczy si przed bdami i brakiem rysunkw dla niektrych kategorii:

Private Sub Form_Current()
On Error Goto Current_Error
txt = Null
If Not IsNull(txt) And txt <> "" Then
Me.Picture = Me!obrazek
Else
'co ma sie dziac, jezeli nie ma obrazka dla kategorii?
'wybierz jedn linijk z 3 poniszych
Me.Picture = "default.bmp" 'jezeli ma byc wyswietlony obrazek domyslny
Me.Picture = "(brak)" 'jezeli nie ma byc wyswietlony zaden obrazek - dla Access PL
Me.Picture = "(none)" 'jezeli nie ma byc wyswietlony zaden obrazek - dla Access EN
End If
Exit Sub 'zakocz

Current_Error:
'co zrobi w przypadku jakiego bdu, ktry nie zosta wyej przewidziany, np. jak nie ma obrazka na dysku, a jest jego nazwa zapisana w tabeli? - w tym przypadku NIC
End Sub