Verander logo op alle formulier

Status
Niet open voor verdere reacties.

LuckyFm

Gebruiker
Lid geworden
3 feb 2015
Berichten
91
Beste forumleden,

In mijn applicatie heb ik zo'n 20 formulieren waarvan de meeste een logo zichtbaar hebben.
In elk formulier een image toegewezen, dat is niet echt handig want nu wil ik een nieuw logo op mijn formulieren.
Dan moet ik dus alle 20 formulieren af en de logo's handmatig veranderen.

Dat wil ik eigenlijk het liefst in één keer regelen voor al mijn formulieren, nu weet ik dat ik de locatie van mijn logo
kan opslaan in een tabel en dan met "DLookup" in alle formulieren in die tabel kan kijken naar welk logo er moet worden getoond.
Dit werkt wel maar erg vertragend, nu zou ik graag willen weten of er een ander mogelijkheid is om de logo's op alle formulieren één keer te wijzigen.

Als iemand een idee heeft, het liefst zo dat mijn applicatie beheerder op elk gewenst moment een ander logo kan kiezen en opslaan.
Daarmee zou ik enorm geholpen zijn.

alvast bedankt voor de reacties.

Gr, Luc
 
... nu zou ik graag willen weten of er een ander mogelijkheid is om de logo's op alle formulieren één keer te wijzigen.
Simpel antwoord: ja. Uitgebreid antwoord: ja, maar dat kost je vermoedelijk 3 keer zoveel tijd als het handmatig aanpassen omdat je best een hoop tijd kwijt bent met het bedenken/maken van de benodigde procedure. Die dan wel weer heel snel kan draaien natuurlijk. Dus of je dat moet willen... Je geeft al aan wat dus een verkeerde werkwijze is: alle formulieren het logo er hard in zetten. Je geeft ook een (ook fout in mijn optiek) alternatief aan: de afbeelding in een tabel zetten en met DLookup plaatsen. Dat bevat twee 'fouten': afbeeldingen opslaan in een tabel, en met DLookup werken.

Ik zou de afbeelding(en) dus nooit opslaan in een tabel maar de logo(s) in een map bij de database. Vervolgens lees je bij het openen van het formulier het logo in. Dat houdt dus in ieder geval in dat je het afbeeldingsobject in alle formulieren leeg moet maken. Dat gaat, al kun je daar een macro voor maken, (zie hierboven) het snelst door even alle formulieren te openen, en de afbeelding uit het afbeeldingsobject te verwijderen. Met 20 formulieren is dat zo gebeurd.
Vervolgens heb je dus een procedure nodig die de afbeelding aan het Image object koppelt als je het formulier opent. En dat gaat razend snel. En je kan heel snel van logo wisselen: alleen de afbeelding in de map vervangen is genoeg.
 
OctaFish,

Bedankt voor je reactie.

Ik lees wat je schrijft ik denk dat ik het ook wel begrijp:
ik heb in dezelfde map als mijn database een bestandje Logo.png (mijn huidige logo).
Nu heb jij het over een procedure, en daar ben je mij kwijt.
Mijn gok een public function die je dan kan aanroepen in hert onload event van het formulier,

Code:
Option Compare Database
Option Explicit


Public Sub LoadLogo()
    ?? wat Hier ??
End Sub


Deze procedure opslaan.

en dan aanroepen?

onload event:
Me.picLogo.Picture = LoadLogo

zoiets neem ik aan??
Correct me if i'm wrong :)


Je zou mij enorm op weg helpen met een voorbeeldje.
Alvast bedankt voor je hulp

Gr, Luc.
 
Correct me if i'm wrong :)
Ga ik zeker doen :). Het is maar één regeltje code. In jouw geval zou dat dit kunnen zijn:
Code:
Private Sub Form_Load()
    Me.picLogo.Picture = CurrentProject.Path & "\Logo.jpg"
End Sub
 
Michel, ik zie geen merkbare vertraging bij het met DLookup opzoeken van een tekstregel in een tabel met een verwijzing naar de locatie van een jpg bestand voor het correct koppelen in een rapport; zelfs met loopen door een recordset met meerdere rapporten over netwerk. Enkel maar de tijd die het inladen van een jpg nodig heeft (volgens de resolutie - of bestandsgrootte) vertraagt de boel.
 
Michel, ik zie geen merkbare vertraging bij het met DLookup opzoeken van een tekstregel in een tabel
Ik stam nog uit de tijd dat je daadwerkelijk verschil kon meten als je DLookup gebruikte :). Maar hoe dan ook: Dfuncties zijn beter te vermijden.
 
Ik ben geen deskundige maar wat hier wordt vermeld heb ik op een vrij simpele manier opgelost.

Ik heb een database met daarin een formulier genaamd "bedrijfsgegevens". Hierin velden opgenomen die gebruikt kunnen worden voor o.a. rapporten etc...
een van deze velden is een object. Daarin heb ik het logo opgenomen. Dit zelfde veld op alle relevante formulieren en rapporten ook opgenomen.

Wil iemand het logo veranderen dan kan dit via het formulier bedrijfsgegevens. Alleen hier hoeft het logo te worden aangepast. De rest wordt dan automatisch aangepast.
Geen enkele code voor nodig gehad.
 
Dan ben ik bijna zeker dat je database enorm is gegroeid qua MB want objecten zoals JPG worden in de database X maal opgeslagen volgens dat je ze gebruikt. Het zal het inladen van je database vertragen om nog maar niet te spreken van de serverruimte, backupruimte, tijd om je database te kopiëren, etc.... Indien je het bestand gekoppeld gebruikt met één regeltje code moet je het logobestand ook maar éénmaal veranderen.
Nb: ik gebruik iets gelijkaardigs; een "instellingsformulier" (met dus een tabel) waarbij dat de gebruiker de mogelijkheid heeft om algemeen en/of per rapport zelf een paar logo's gekoppeld toe te voegen/wijzigen met een paar klik's. Dat vraagt dus wat programmeerwerk maar de interactie achteraf bij wijzigingen kan de gebruiker zelf doen wat in uw geval normaal niet kan.
 
Laatst bewerkt:
Dag,

Dat klopt maar voor mijn situatie valt het reuze mee. Het gaat maar om 1 jpg logo. Ik heb een database waarbij een administratie wordt bijgehouden van een kleine zelfstandige.
Ik heb een formulier waarin de bedrijfsgegevens worden vastgelegd inclusief het logo.

Door te dubbelklikken op het logo kan de gebruiker het logo zelf aanpassen. Deze aanpassing wordt dan vanzelf opgenomen in de desbetreffende formulieren en rapporten.
Bij het afsluiten van de database wordt deze automatisch gecomprimeerd en daalt het aantal mb weer.

Ik heb niet zoveel verstand van coderen, dus ik gebruik altijd het meest simpele. En dat was dus dit en het werkt ook nog eens.

mvg
 
Niemand zal ontkennen dat het niet werkt, maar elke gevorderde gebruiker zal zo snel mogelijk af willen stappen van objecten die in de db zijn opgeslagen, zoals bijlagen en logo's. Voor enkelvoudig gebruik zal het extra verbruik inderdaad wel meevallen, maar zodra je iets meer wilt doen met databases, loop je snel tegen deze beperking aan. Leren programmeren is m.i. een absolute must als je meer uit je databases wilt halen, dus de oplossing zoals Johan en ik die voorstellen, is dan heel snel aangeleerd en geïmplementeerd, en daarmee heb je een stevig fundament onder je database(kennis) waar je nog jaren mee vooruit kunt. Het is dus niet zozeer dat je huidige oplossing dan wel werkt, maar toekomstbestendig is het zeker niet. En dát is nou net wat je moet doen als je goede databases wilt bouwen: altijd vooruit denken. Doe je dat goed, dan hoef je later niet van alles en nog wat te verbouwen omdat je er tóch bent achter gekomen dat het allemaal niet zo geweldig werkt....
 
Dag Allen,

Vandaar dat ik op deze website ben geregistreerd. Om juist te leren en te verbeteren.
Dus ik hoop in de toekomst op veel steun en veel hulp van de deskundigen op deze site.

Een prima site overigens en snelle reacties!

:d
 
Om hier op verder te gaan.

Ik heb een formulier waarbij ik voor de achtergrond een afbeelding zou willen gebruiken.
Kan iemand mij helpen aan de code hiervoor of mij op weg helpen aub.
 
Ik gebruik volgende code in een rapport om een background in te laden (beetje uitleg staat erbij), je moet die natuurlijk zelf een beetje aanpassen naar jouw situatie

Code:
Private Sub Report_Open(Cancel As Integer)
On Error GoTo PictureNotAvailable
'Openargs meegeven aan een onafhankelijke textbox
    If Me.OpenArgs <> vbNullString Then
        Me.TxtSubtitel.ControlSource = "=""" & OpenArgs & """"
    End If
With Me
    .Picture = CurrentProject.Path & "\fotomap\Icons\reportbanner_algemeen_staand1.jpg" ' pad naar de jpg die in de bannerstrook komt te staan
    .PictureAlignment = Left    'http://msdn.microsoft.com/en-us/library/office/aa173197(v=office.11).aspx
    .PictureType = 1            'O is ingesloten en 1 is gekoppeld
    .PictureTiling = False      'yes is in tegels verdeeld over ganse blad   now is niet betegeld
    .PictureSizeMode = 3        'Clip = 0  Stretch = 1  Zoom = 3
End With
PictureNotAvailable:
    Exit Sub
End Sub
 
Top. Hartelijk dank.

Ik ga de code aanpassen en gebruiken, onder jouw naam.
 
@Johan: ik snap je codevoorbeeld niet helemaal. Met name dit stuk:
Code:
Private Sub Report_Open(Cancel As Integer)
    'Openargs meegeven aan een onafhankelijke textbox
    If Me.OpenArgs <> vbNullString Then Me.TxtSubtitel.ControlSource = "=""" & OpenArgs & """"
Deze code heeft alleen zin als je een formule in een tekstvak wilt zetten. Anders kun je net zo goed een label gebruiken en opmaken, en de caption vullen. De naam van het tekstvak suggereert een label functie.

En deze code vind ik ook wat uitgebreid; een afbeelding hoef je maar één keer in te stellen, en dat kun je makkelijk via de eigenschappen doen. Het enige variabele er aan is het logo, dus dat is ook het enige dat ik verander. Dus bij mijn db's volstaat deze code:
Code:
    Me.PictureLogo = CurrentProject.Path & "\fotomap\Icons\reportbanner_algemeen_staand1.jpg"
 
Eerste stuk is iets wat ik standaard in een report meelaadt omdat er meestal via de openargs bij het maken van de criteria tijdens de printopdracht iets meegegeven wordt maar dat hoort inderdaad hier bij deze vraag niet thuis.
Wat je tweede opmerking betreft heb je terug gelijk maar je weet dat daarna dan de vraag kan gesteld worden of ze de afbeelding kunnen spreiden, ofwel links-rechts uitlijnen, etc.....
Rome kan je langs vele (om)wegen bereiken hé.
 
Rome kan je langs vele (om)wegen bereiken hé.
Klopt :). Maar instellingen via VBA regelen doe ik zelf alleen als die instellingen regelmatig veranderen. Bij een logo lijkt mij dat niet van toepassing. En dan hou ik de code liever simpeler.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan