Gå til innhold

Fargerikt spørsmål jah


Anbefalte innlegg

Jeg trenger en måte å velge farger på

 

Denne har for få farger å velge i.

CommonDialog1.Color

Noen måte å få fler farger?

 

I VB skrives fargene som nummer uten bestemt antall siffer. Jeg skal exportere noe til html og vil at ha en funksjon som gjør at brukeren kan velge farge.. Da må fargen oppgis i hex (#xxxxxx) Noen måte å gjøre det på?`

 

Takker og bukker.

Lenke til kommentar
Videoannonse
Annonse

For å konvertere en farge til hex etter HTMLs standard kan du bruke følgende kode:

 

Public Function HTMLHex(Color As Long) As String

Dim sBuffer As String, sHex As String

sBuffer = "#000000"
sHex = Hex(Color)

Mid(sBuffer, Len(sBuffer) - Len(sHex) + 1) = sHex

HTMLHex = sBuffer

End Function

 

Jonas: Ja, det finnes teknikker som er raskere enn GetPixel og SetPixel. Se bare på dette eksempelet.

Lenke til kommentar

Etter litt leting på nettet fant jeg ut at man kunne bruke API-kallet GdiGradientFillRect for å skape en lignede effekt som Jonas viste i programmet sitt. Her er et eksempel:

 

Private Type TRIVERTEX
   x As Long
   y As Long
   Red As Integer 'Ushort value
   Green As Integer 'Ushort value
   Blue As Integer 'ushort value
   Alpha As Integer 'ushort
End Type
Private Type GRADIENT_RECT
   UpperLeft As Long  'In reality this is a UNSIGNED Long
   LowerRight As Long 'In reality this is a UNSIGNED Long
End Type
Const GRADIENT_FILL_RECT_H As Long = &H0 'In this mode, two endpoints describe a rectangle. The rectangle is
'defined to have a constant color (specified by the TRIVERTEX structure) for the left and right edges. GDI interpolates
'the color from the top to bottom edge and fills the interior.
Const GRADIENT_FILL_RECT_V  As Long = &H1 'In this mode, two endpoints describe a rectangle. The rectangle
' is defined to have a constant color (specified by the TRIVERTEX structure) for the top and bottom edges. GDI interpolates
' the color from the top to bottom edge and fills the interior.
Const GRADIENT_FILL_TRIANGLE As Long = &H2 'In this mode, an array of TRIVERTEX structures is passed to GDI
'along with a list of array indexes that describe separate triangles. GDI performs linear interpolation between triangle vertices
'and fills the interior. Drawing is done directly in 24- and 32-bpp modes. Dithering is performed in 16-, 8.4-, and 1-bpp mode.
Const GRADIENT_FILL_OP_FLAG As Long = &HFF
Private Declare Function GdiGradientFillRect Lib "gdi32" Alias "GdiGradientFill" (ByVal hdc As Long, pVertex As TRIVERTEX, ByVal dwNumVertex As Long, pMesh As GRADIENT_RECT, ByVal dwNumMesh As Long, ByVal dwMode As Long) As Long
Private Function LongToUShort(Unsigned As Long) As Integer
   'A small function to convert from long to unsigned short
   LongToUShort = CInt(Unsigned - &H10000)
End Function
Private Sub Form_Load()
   'KPD-Team 2001
   'URL: http://www.allapi.net/
   'E-Mail: [email protected]
   'API uses pixels
   Me.ScaleMode = vbPixels
End Sub
Private Sub Form_Paint()
   Dim vert(1) As TRIVERTEX
   Dim gRect As GRADIENT_RECT
   'from black
   With vert(0)
       .x = 0
       .y = 0
       .Red = 0&
       .Green = 0& '&HFF&   '0&
       .Blue = 0&
       .Alpha = 0&
   End With
   'to red
   With vert(1)
       .x = Me.ScaleWidth
       .y = Me.ScaleHeight
       .Red = LongToUShort(&HFF00&)
       .Green = 0&
       .Blue = 0&
       .Alpha = 0&
   End With
   gRect.UpperLeft = 0
   gRect.LowerRight = 1
   GdiGradientFillRect Me.hdc, vert(0), 2, gRect, 1, GRADIENT_FILL_RECT_H
End Sub

Lenke til kommentar

HTML standaren fungerer annerledes enn VB. Ettersom RGB returnerer et nummer vil hex-verdien være omtrent slik: BGR. Dette fungerer ypperlig med Val og andre slike funksjoner, men HTML antar at rekkefølgen er slik: RGB. Derfor må du snu verdiene. Dette kan du blant annet gjøre med følgende funksjon:

 

Public Function InvertColor(Color As Long) As Long

InvertColor = RGB((Color And vbBlue) / vbGreen, (Color And vbGreen) / vbRed, Color And vbRed)

End Function

 

Da kan du erstatte linjene i koden som skriver til filen med følgende:

 

Open "c:\htmfil.htm" For Output As #1
Print #1, "<body bgcolor=" & HTMLHex(InvertColor(lFarge)) & ">"
Close #1

Lenke til kommentar

Jeg har ikke murlighet til å teste dette enda men vil:

Print #1, "<body bgcolor=" & HTMLHex(InvertColor(lFarge)) & ">"

gi kontrasten til "VBfargen"? Isåfall blir nok heller ikke det bli riktig, for noen farger blir like, feks. svart.

 

Takker og bukker for hjelp.

 

 

Edit: Obs, jeg leste ikke godt nok :p

Endret av Blaster2k
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...