Autofit tekstbox

Status
Niet open voor verdere reacties.

glimmerman

Nieuwe gebruiker
Lid geworden
5 okt 2009
Berichten
4
Hoi,

Ik heb in access een rapport gemaakt om titelkaartjes van singels te maken.
Zo'n titelkaartje heeft 3 tekstvelden.

Artiest
Kant A
Kant B

De ene keer is de artiestennaam erg kort bv BLÖF, echter de andere keer is de naam opgebouwd uit een veelvoud van karakters bv BOUDEWIJN DE GROOT.
Toch wil ik graag in beide situatie het formaat van het tekstveld optimaal benutten.
Kent Access een autofit fuctie voor tekst in een tekstveld ?
Of is er een manier hoe ik dit kan maken (dus bij lange namen automatisch een kleiner gebruiken).

groet
Mike
 
Je kunt in een rapport voor een tekstvak aangeven of hij is te vergroten en te verkleinen, maar dat werkt dacht ik alleen voor de hoogte van het tekstvak, niet voor de breedte.
Aangezien je tekstvakken op een vaste positie neerzet, maakt het ook niet zoveel uit of je een tekstvak smaller maakt bij een kleinere tekst, want de achtergrond van het tekstvak zie je (bij een normale instelling) toch niet. De standaard achtergrondstijl is immers transparant. Als je een andere stijl gebruikt, en de breedte dus wel wilt kunnen aanpassen, zul je met VBA moeten werken, om bijvoorbeeld het aantal karakters van de tekst uit te lezen, en de breedte moeten aanpassen bij een bepaalde hoeveelheid tekens. Dit is overigens niet helemaal betrouwbaar, omdat je waarschijnlijk met proportionele lettertypes werkt met een wisselende tekenbreedte. Hierbij zijn iiii smaller dan wwww.
 
Laatst bewerkt:
Autofit

Hoi Michel,

bedankt voor jouw reactie echter ik denk dat mijn vraag niet helemaal
duidelijk is.
Het tekstveld heeft een vaste afmeting en mag niet wijzigen. Wat ik wil
is dat de tekst zich aanpast aan het tekstveld. Dus wanneer het aantal letters
het tekstveld overschrijdt, de lettergrootte automatisch kleiner wordt zodat toch
de gehele tekst binnen het bestaande tekstvak past.

Groet
Mike
 
Nog even afgezien van de esthetische aspecten, van wisselende tekstgroottes in de detailsectie van je rapport, waardoor de tekst er (naar mijn idee) erg rommelig uit gaat zien, kan ik, al zat ik er 180 graden naast, toch dezelfde (soort) oplossing aanleveren: wilde ik in eerste instantie de grootte van het tekstvak aanpassen a.d.h.v. het aantal tekens dat past in een tekstvak, nu raad ik je aan om dan dus het lettergrootte te verkleinen.
Je kunt zelf vrij nauwkeurig uitmeten hoeveel letters je ongeveer kwijt kunt in een tekstvak, en die waarde als basis gebruiken voor je formules. Het volgende voorbeeld moet je zetten op de gebeurtenis <Bij opmaken> van de Detailsectie:

Stel dat je bij een bepaalde grootte van het tekstvak en lettertype weet dat je 30 karakters kwijt kunt, en bij één punt kleiner 35 karakters, en bij twee punten kleiner 40, enz. Dan kun je een Select Case maken op basis van de functie Len([Tekstvak]), ongeveer zoals dit:

Code:
Select Case Len([Tekstvak])
    Case Is > 40
        Me.Tekstvak.FontSize = 9
    Case Is > 35
        Me.Tekstvak.FontSize = 10
    Case Is > 30
        Me.Tekstvak.FontSize = 11
    Case Else
        Me.Tekstvak.FontSize = 12
End Select
Uiteraard moet je hier nog een beetje mee stoeien, voor je het goed hebt staan.
 
autofit

Hoi Michel,

Je hebt mij de code gegeven om de grootte van het lettertype automatisch aan te laten passen.
Klinkt erg dommig maar waar moet ik die code precies plaatsen want het lukt mij niet

(ben tamelijk onervaren in access).

tekstvakken zijn genaamd:
tekstvak kanta
tekstvak artiest
tekstvak kantb

alvast bedankt voor de hulp

groet
Mike
 
Is ook nog niet helemaal uitgekristalliseerd ;)
Maar: ik heb er een zoeklicht bij gehouden, en kwam op deze oplossing: een code <Bij aanwijzen> van het formulier, en een aparte functie, die ook op het formulier moet staan.

Code:
Private Sub Form_Current()

If Not Nz(Me.txtLokatie, "") = "" Then
    Me.txtLokatie.FontSize = TekstGrootte(Me.txtLokatie)
End If

End Sub
Deze code wordt uitgevoerd bij het bladeren door de verschillende records. Ik heb als voorbeeldje een tekstvak txtLokatie genomen, waarvan de grootte wordt bepaald a.d.h.v. een functie, die hieronder staat.

Code:
Function TekstGrootte(TekstVak As String) As Integer

Select Case Len(TekstVak)
    Case Is > 12
        TekstGrootte = 9
    Case Is > 8
        TekstGrootte = 10
    Case Is > 5
        TekstGrootte = 11
    Case Else
        TekstGrootte = 12
End Select

End Function
De functie heeft een variabele nodig (TekstVak genaamd) en controleert daavan het aantal tekens. De uitkomst daarvan is een getal; in het voorbeeld bijvoorbeeld het getal 10 als de lengte 11 tekens is (11 is kleiner dan 12, dus niet 9; de volgende vergelijking is: 11 is groter dan 8, dus daarom 10).

De functieaanroep Me.txtLokatie.FontSize = TekstGrootte(Me.txtLokatie) kun je dus voor verschillende tekstvakken tegelijk gebruiken; je hoeft de regel maar te kopiëren, en de naam van het tekstvak tussen de haakjes te zetten.

De hele code staat dus achter het formulier; als je de gebeurtenis <Bij laden> gebruikt, en de hele code e onder plakt (dus nà de laatste regel End Sub) dan moet het goed komen...
Overigens kun je ook een nieuwe module maken, met <Invoegen>, <Module>, en daar de Functiecode neerzetten. Dan kun je de functie ook op andere formulieren gebruiken. Of wordt het nu teveel? ;)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan