RGB als veldwaarde

Status
Niet open voor verdere reacties.

so10070

Gebruiker
Lid geworden
4 feb 2014
Berichten
424
Voor de kopteksten van de rapporten heb ik verschillende RGB-waarden naargelang de divisie die het rapport afdrukt. De RGB-waarde is opgeslagen in een veld met naam "RGBWaarde" met naam "txtRGBWaarde". Ik wil nu de koptekst volgens deze waarde een kleur geven, maar blijkbaar is er een type mismatch. Heb al van alles geprobeerd: Me.Rapportkoptekst.Backcolor = Me.txtRGBWaarde, Me.Rapportkoptekst.Backcolor = '" & Me.txtRGBWaarde"'. :confused:
 
RGB bestaat uit gradaties voor 3 kleuren, Rood, Groen en Blauw (R, G, B). Dus dat zou dan bijvoorbeeld moeten zijn Me.Rapportkoptekst.Backcolor = RGB(255, 255, 255)
Dus wat heb je in dat veld als waarde staan?
 
Dat vraag ik me ook af :). Access gebruikt van zichzelf getalwaarden tussen 0 en 16,7 miljoen,dus complete getallen lukt ook nog wel. Dan hoef je geen rgb omzetting te doen. Maar geef vooral een voorbeeldje van wat je in het veld hebt staan.
 
Dat is dus puur tekst en zal niet als functie worden uitgevoerd. Hoe je dat het beste kunt doen kan Octafish beter uitleggen.
 
Schuif maar af ;). Maar Ed heeft gelijk, hier ga je denk ik een probleem mee krijgen. Ok dan, hier een poging:
Code:
Private Sub Form_Current()
Dim var As Variant
    var = Split(Mid(Me.txtRGBWaarde, InStr(1, Me.txtRGBWaarde, "(") + 1, Len(Me.txtRGBWaarde) - (InStr(1, Me.txtRGBWaarde, "(")) - 1), ",")
    Me.Datum_uitleen.BackColor = RGB(var(0), var(1), var(2))
End Sub
Maar ik zou een ander systeem bedenken :)
 
Sla het dus in dat veld op als xxx,yyy,zzz
Dan kun je de functie van Octafish veel eenvoudiger houden:
Code:
Private Sub Form_Current()
    Dim var As Variant
    var = Split(Me.txtRGBWaarde, ",")
    Me.Datum_uitleen.BackColor = RGB(var(0), var(1), var(2))
End Sub

Dan mag je het bijvoorbeeld ook opslaan als x,yy,zzz
 
Waarom laat je TS niet zelf zoiets bedenken? We hoeven toch niet alles voor te kauwen? Als ik dat gewild had, dan had ik die variant er wel bijgezet :D
 
Bijna kerst. Ik begin alvast te kauwen ;)
 
Ik zou gebruikmaken van de niet zo bekende functie Eval
Me.Rapportkoptekst.Backcolor = Eval(Me.txtRGBWaarde)
 
De Eval functie is voor een string met reken expressies erin. Ik verwacht niet dat dat gaat werken. Je hebt namelijk de Longword waarde nodig die word geleverd door RGB(xxx,yyy,zzz).
 
Is een goeie, Harry. Die kende ik nog niet :). Werkt uiteraard...
 
Ik zie inderdaad net pas dat je Eval("RGB(xxx,yyy,zzz)") kunt gebruiken en dan zal het wel werken. Ik kende de functie wel maar nog nooit gebruikt.
 
Maar laten we TS (die zwijgt als een Tibetaanse monnik met zwijgstraf) nu weer eens serieus helpen, en het een stukje makkelijker maken.

En dat begint uiteraard met het kiezen van de kleuren, en die vervolgens opslaan in het tekstveld [txtRGBWaarde]. Want dat lijkt mij toch de meest aangewezen weg als je een nieuwe kleur zoekt of aanpast. Als je in de Eigenschappen (al dan niet via de keuzelijst of de colorpicker) een kleur hebt gekozen, dan wordt die (in ieder geval in mijn versie van 2010) weergegeven als een hexadecimaal getal. In oudere versies zag je overigens een lang kleurennummer. En dat is dus de waarde die je wilt opslaan in je tabel.

Als voorbeeldje de kleur RGB(50,155,175). Dat levert in lange getalnotatie de kleur '11508530' op, en in de nieuwe notatie is dat "#329BAF". Beide notaties zijn simpel te kopiëren en te plakken in een database veld, iets dat niet gezegd kan worden van de tekst "RGB(50,155,175)". Dus je zet in het tekstveld de hex waarde van de kleur, die je gewoon kunt kiezen.
Dan heb je nog een functie nodig die de waarde terugvertaalt naar een kleurwaarde, en die ziet er dan zo uit:

Code:
Function Hex2RGB(ByVal HexColor As String) As Long
Dim Red As String, Green As String, Blue As String

    HexColor = Replace(HexColor, "#", "")
    Red = Val("&H" & Mid(HexColor, 1, 2))
    Green = Val("&H" & Mid(HexColor, 3, 2))
    Blue = Val("&H" & Mid(HexColor, 5, 2))
    Hex2RGB = RGB(Red, Green, Blue)
End Function

En op het formulier gebruik je dan deze opdracht:
Code:
        Me.Rapportkoptekst.BackColor = Hex2RGB(Me.txtRGBWaarde)

En dan heb je volgens mij een veel simpelere manier van opslag en uitlezen die ook nog eens veel minder afhankelijk is van eventuele invoerfouten in het kleurveld. Want als je een typefout maakt in de formule, dan ben je de pineut. Sowieso zou ik nooit formules opslaan, en die later uit een veld halen om te verwerken. Nergens voor nodig :).
 
De Eval-functie werkt perfect! Bedankt voor alle suggesties en uiteraard een fijne kerst toegewenst. :thumb: ;)
 
Ik zou toch eens goed nadenken of je het wel op deze manier wilt doen; ik vind het de meest riskante optie :).
 
Kan het ook op de volgende manier doen. Als de RGB-string altijd als volgt ingevoerd wordt : "RGB(xxx,yyy,zzz)" zonder ergens spaties te voorzien.
Code:
Private Sub Form_current()
[INDENT]Dim var as variant
var = split(mid(txtRGBWaarde,5,len(txtRGBWaarde)-5),",")
Me.Rapportkoptekst.BackColor = RGB(var(0),var(1),var(2))[/INDENT]
End Sub
 
Maar dan zit je nog steeds met die formule in je tekstveld. Kun je net zo goed de Eval functie gebruiken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan