Blaster2k Skrevet 9. september 2004 Del Skrevet 9. september 2004 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
Jonas Skrevet 9. september 2004 Del Skrevet 9. september 2004 (endret) Se på prosjektet i vedlegget. Edit: Jo lavere variabelen "forskjell" er, jo mer resurser krever programmet, men du får flere farger. Edit2: Finnes det noe raskere metode enn GetPixel og SetPixel? farger.zip Endret 9. september 2004 av Jonas Lenke til kommentar
aadnk Skrevet 9. september 2004 Del Skrevet 9. september 2004 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
aadnk Skrevet 9. september 2004 Del Skrevet 9. september 2004 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
Blaster2k Skrevet 10. september 2004 Forfatter Del Skrevet 10. september 2004 Takker og bukker =) Lenke til kommentar
Blaster2k Skrevet 10. september 2004 Forfatter Del Skrevet 10. september 2004 Men jeg skjønner ikke helt hvordan man bruker den function'en Lenke til kommentar
aadnk Skrevet 10. september 2004 Del Skrevet 10. september 2004 F.eks slik: Dim lFarge As Long lFarge = InputBox("Skriv inn nummeret som representerer fargen du ønsker") MsgBox "I HTML skal denne fargen skrives slik: " & HTMLHex(lFarge) Ikke verre enn det. Lenke til kommentar
Blaster2k Skrevet 14. september 2004 Forfatter Del Skrevet 14. september 2004 Jeg får det ikke til å funke helt enda Det er ikke altid fargene blir di samme fargene som hex o_O, Se på den vedlagte filen. Prøv for eksempel: Rød: 239 Grønn: 88 Blå: 16. Det er en orangefarge, men i som hex i html blir den nesten kontrastfargen. Er det noen måte å få dette til å funke rett? fargefux.zip Lenke til kommentar
aadnk Skrevet 14. september 2004 Del Skrevet 14. september 2004 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
Blaster2k Skrevet 15. september 2004 Forfatter Del Skrevet 15. september 2004 (endret) 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 Endret 15. september 2004 av Blaster2k Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå