keks-n писал(а):Ужос в общем... У всех кто выкладывал здесь код были ошибки... Думаю, что мы многое о себе узнали
На мою ошибку забили от счастья, что так быстро работает Это все Тёмыч виноват Дал для проверки "симметричный" цветХакер писал(а):Это что, намного страшнее того, что некоторые люди забыли про отсвутсвие ведущих нулей у возврата Hex$ или то что если сделать Hex$(Color) будет BBGGRR ?
Хакер писал(а):угу.
особено RGB(255,0,255)
ЗЫ. А почему у тебя интересно также \ всесто / хотя там всегда целый резульатат. И также \255\255 а не \ 65025
странные совпадения, не правда ли?
Option Explicit
Private Type RGBTRIPLE
Red As Byte
Green As Byte
Blue As Byte
End Type
Private Declare Function wvsprintf Lib "user32" Alias "wvsprintfA" (ByVal lpOutput As String, ByVal lpFormat As String, arglist As Any) As Long
Private Declare Sub GetMem4 Lib "msvbvm60" (ByVal pSrc As Long, Dst As Any)
Function RGB2Hex(ByVal Color As OLE_COLOR) As String
Dim args() As Long, rgbt As RGBTRIPLE
ReDim args(3): GetMem4 VarPtr(Color), rgbt
' спасибо за бдительность vvs_adm!
args(0) = rgbt.Red
args(1) = rgbt.Green
args(2) = rgbt.Blue
Dim Result As String: Result = Space(10)
RGB2Hex = Left(Result, wvsprintf(Result, "#%.2X%.2X%.2X", args(0)))
End Function
Sub Main()
Debug.Print RGB2Hex(RGB(238, 255, 192))
End Sub
Хакер писал(а):Просто сегодня я в принципе, занят. Причём занят тяжёлой ручной работой, в которой используется монтировка.
Option Explicit
Private Declare Function wvsprintf Lib "user32" Alias "wvsprintfA" (ByVal lpOutput As String, ByVal lpFormat As String, arglist As Any) As Long
Private Declare Sub PutMem1 Lib "msvbvm60" (ByVal pDst As Long, ByVal Src As Byte)
Function RGB2Hex(ByVal Color As OLE_COLOR, Optional Magic1, Optional Magic2) As String
Dim args() As Long: ReDim args(3)
Magic2 = VarPtr(Magic1) + 8
PutMem1 VarPtr(Magic2) + 1, &H40
Magic1 = CByte(0)
PutMem1 VarPtr(Magic1) + 1, &H40
Magic2 = VarPtr(Color): args(0) = Magic1
Magic2 = Magic2 + 1: args(1) = Magic1
Magic2 = Magic2 + 1: args(2) = Magic1
Dim Result As String: Result = Space(10)
RGB2Hex = Left(Result, wvsprintf(Result, "#%.2X%.2X%.2X", args(0)))
End Function
Sub Main()
Debug.Print RGB2Hex(RGB(192, 255, 238))
End Sub
Да оно понятно, что легко. Это я в защиту Хакера ,так как мы все тут как сговорились сегодня иtyomitch писал(а):2vvs_adm: ну ладно, исправить-то было легко: только индексы поменять
tyomitch писал(а):"Я тут чего-то написал, а дебажьте вы сами, раз вам надо, а не мне."
Хакер писал(а):нет. оставить мой первый вариант и мой поправленный вариант. ибо автору надо знать правильные варианты
?Hex(&H2014FF)
2014FF
?Hex(RGB(255, 127, 254))
FE7FFF
Хакер писал(а):Чтобы из 201 сделать 000201, а потом из 00 02 01 сделать 010200 и придуман был весь этот код.
vvs_adm писал(а):Да тут теперь как сделать - не вопрос Решали, как максимально быстро сделать.
?Hex(RGB(B, G, R))
FF0000
?Hex(RGB(0, 2, 1))
10200
keks-n писал(а):Ужос в общем... У всех кто выкладывал здесь код были ошибки... Думаю, что мы многое о себе узнали
Хакер писал(а):RGB2Hex = "#" + Mid$(bgrhex, 5,2) + Mid$(bgrhex, 3,2) +Mid$(bgrhex, ***5***,2)
ReDim args(3)
ReDim args(2)
Kovu писал(а):Хм, Хакер, я конечно понимаю что может быть и тупой, но объясни при чем тут Long? Особенно если учесть, что функция работает и при
- Код: Выделить всё
ReDim args(2)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 112