Помогите чайнику разобраться с выбором цвета.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.07.2006 (Вс) 18:18

Ужос в общем... У всех кто выкладывал здесь код были ошибки... Думаю, что мы многое о себе узнали :lol:
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 18:18

Да ну вас всех

Вас много я один. Мой вариант почему то оказывается самым плохим.

Вот я предложил самый первый вариант, от которого GSerg-у стало до тошноты плохо.

Что вам скорость. Вы бы ещё устроили бенчи для End и Error.

Я что не имею право на ошибку. Что я не могу спутать 255 и 256. Это что такая серьёзная ошибка? Это что, намного страшнее того, что некоторые люди забыли про отсвутсвие ведущих нулей у возврата Hex$ или то что если сделать Hex$(Color) будет BBGGRR ?

Только вот почему то так принято. Может быть у меня ник такой вызывающий, что вы отменя ожидаете безошибочность. Или что? Может не стоило мне говорить что я много уровней крэктэста прошёл. Или может быть всё в том что я зарегистрировался 13 ноября?
Число ведь не счастливое...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 18:46

keks-n писал(а):Ужос в общем... У всех кто выкладывал здесь код были ошибки... Думаю, что мы многое о себе узнали :lol:


А какая ошибка была у меня в самом первом коде?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.07.2006 (Вс) 19:09

Не в первом-во втором... С него всё и началось
Изображение

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 16.07.2006 (Вс) 19:19

Хакер писал(а):Это что, намного страшнее того, что некоторые люди забыли про отсвутсвие ведущих нулей у возврата Hex$ или то что если сделать Hex$(Color) будет BBGGRR ?
На мою ошибку забили от счастья, что так быстро работает :lol: Это все Тёмыч виноват :) Дал для проверки "симметричный" цвет :)
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.07.2006 (Вс) 19:50

Хакер, страшная ошибка была не в том, что ты спутал 255 и 256.
А в том, что ты не удосужился проверить запощенный код даже на собственном примере и даже после напоминания.
Дело-то пятисекундное.

Выглядит, как полное пренебрежение к читателям твоих постов. "Я тут чего-то написал, а дебажьте вы сами, раз вам надо, а не мне." Некрасиво.

--------------------
Напомню также, что симметричный цвет дал не я.
Хакер писал(а):угу.

особено RGB(255,0,255)

ЗЫ. А почему у тебя интересно также \ всесто / хотя там всегда целый резульатат. И также \255\255 а не \ 65025

странные совпадения, не правда ли?
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 19:57

tyomitch

я опробовал вариант с 255 и поскольку всё работало, не стал ничего изменять. Оказалось что всё таки мои подозрения были не напрасны

Добавлено:
На счёт проверок кода, я всегда проверяю то что постю. Просто сегодня я в принципе, занят. Причём занят тяжёлой ручной работой, в которой используется монтировка. Так что я как-бы в надежде на вас думал что если вы вдруг не так, то меня просто поправят, а не будут тут холивар устраивать, на тему, что лучше Right или Format
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.07.2006 (Вс) 20:14

Хакер, чесслово, я не хочу нового флейма "все против всех".
Давайте уже уговоримся?


Чтобы моё участие в топике не выглядело как чистой воды провокация, приведу свой код :lol: :lol:
Код: Выделить всё
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




Добавлено:
Хакер писал(а):Просто сегодня я в принципе, занят. Причём занят тяжёлой ручной работой, в которой используется монтировка.

Угу, и ник как раз подходящий ;-)
Последний раз редактировалось tyomitch 16.07.2006 (Вс) 20:54, всего редактировалось 2 раз(а).
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 20:18

была у меня такая идея. но она требует кучу всего. (Я люблю не быстрый код, а компактный)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 16.07.2006 (Вс) 20:34

Что-то я не понял... Разве код Темыча не выдает GBR ?
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.07.2006 (Вс) 20:50

Тогда вот ещё один хитрозакрученный код, в качестве proof-of-concept свежевыдуманной технологии:

Код: Выделить всё
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



2vvs_adm: ну ладно, исправить-то было легко: только индексы поменять :-)
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.07.2006 (Вс) 20:57

Роковая тема-обязательно вылезает ошибка... Предлагаю её удалить :lol: . Мотивация:
1) Не позорится тем, кто ошибся
2) Не позорится тем, кто сюда напишет :lol:
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.07.2006 (Вс) 21:00

нет. оставить мой первый вариант и мой поправленный вариант. ибо автору надо знать правильные варианты
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 16.07.2006 (Вс) 22:04

tyomitch писал(а):2vvs_adm: ну ладно, исправить-то было легко: только индексы поменять :-)
Да оно понятно, что легко. Это я в защиту Хакера ,так как мы все тут как сговорились сегодня и
tyomitch писал(а):"Я тут чего-то написал, а дебажьте вы сами, раз вам надо, а не мне."
:lol: :lol:
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 17.07.2006 (Пн) 9:03

Хакер писал(а):нет. оставить мой первый вариант и мой поправленный вариант. ибо автору надо знать правильные варианты


Он уже использует твой первей вариант(см. первую страницу)
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 17.07.2006 (Пн) 16:11

Может до меня чего-то не доходит...
Cтолько писанины про RGB2Hex - чтобы всего-навсего изобрести свой аналог имеющейся и прекрасной работающей функции Hex? Нафига это все?

Код: Выделить всё
?Hex(&H2014FF)
2014FF
?Hex(RGB(255, 127, 254))
FE7FFF
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 17.07.2006 (Пн) 16:34

:twisted:
красный цвет = RGB(255,0,0) = #FF0000

что даст Hex$

она даст FF.

Хорошо, добавим нули в конец и дело в шляпе.

А в шляпе дырка.

попробуем такой цвет

RGB(1,2,0). Его вэб-представление - #010200

а что возвратит твой вариант?

...201

"201" = "010200" нет.

Чтобы из 201 сделать 000201, а потом из 00 02 01 сделать 010200 и придуман был весь этот код.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 17.07.2006 (Пн) 16:41

Хакер писал(а):Чтобы из 201 сделать 000201, а потом из 00 02 01 сделать 010200 и придуман был весь этот код.


А - перепутаны цвета... Не обратил внимания. Просто уже давно делал и казалось что проблем тогда вообще не было. Как тогда решил уже не помню - искать надо...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 17.07.2006 (Пн) 16:45

Да тут теперь как сделать - не вопрос :) Решали, как максимально быстро сделать.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 17.07.2006 (Пн) 16:50

vvs_adm писал(а):Да тут теперь как сделать - не вопрос :) Решали, как максимально быстро сделать.


Что из чего сделать?

Если из цветов R, G, B надо сделать шестнадцатеричное представление BGR, то тогда:

Код: Выделить всё
?Hex(RGB(B, G, R))
FF0000

?Hex(RGB(0, 2, 1))
10200
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 17.07.2006 (Пн) 16:58

Andrey Fedorov

во первых тогда vbBlue + vbGreen будет не как "00FFFF" а как "FFFF"

это раз.

Во вторых я так и делал. Тут ещё надо получить R, G и B из предоставленного Color As Long

Ну и потом. Нафиг тут быстрота? Вы мне скажите. Неужели вы думаете, что пользователь может выбирать элементы в КомбоБоксе так быстро, что разница между "быстрыми" и "медленными" способами будет заметна?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 17.07.2006 (Пн) 17:17

keks-n писал(а):Ужос в общем... У всех кто выкладывал здесь код были ошибки... Думаю, что мы многое о себе узнали :lol:

И Andrey Fedorov не исключение... Срочно закрывайте тему!
Изображение

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.07.2006 (Пн) 17:25

:shock: :lol:

Заметим, что даже первый код содержит ошибку, ибо

Хакер писал(а):RGB2Hex = "#" + Mid$(bgrhex, 5,2) + Mid$(bgrhex, 3,2) +Mid$(bgrhex, ***5***,2)
Быть... или не быть. Вот. В чём вопрос?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 17.07.2006 (Пн) 17:29

прОклятая тема... срочно завите шамана, чтобы он выгнал злых духов. :lol:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 17.07.2006 (Пн) 17:32

А можно поинтересоваться у Тёмыча, почему он делает
Код: Выделить всё
ReDim args(3)

Хотя используется только 3 элемента массива а не 4?
Если всё делать своими ручками, они скоро отвалятся !

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 17.07.2006 (Пн) 17:33

потому что в Long 4 байта
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 17.07.2006 (Пн) 17:41

Хм, Хакер, я конечно понимаю что может быть и тупой, но объясни при чем тут Long? Особенно если учесть, что функция работает и при
Код: Выделить всё
ReDim args(2)
Если всё делать своими ручками, они скоро отвалятся !

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 17.07.2006 (Пн) 17:44

Ааа... ну тогда типа чтобы в RGBA2Hex легко переделать можно было.

А может быть просто, думал как и я, хотя Long и правда значения тут не имеет
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.07.2006 (Пн) 18:59

Kovu писал(а):Хм, Хакер, я конечно понимаю что может быть и тупой, но объясни при чем тут Long? Особенно если учесть, что функция работает и при
Код: Выделить всё
ReDim args(2)

Потому что я зачем-то решил, что список va_list нужно завершать нулём.
Сейчас я даже не могу понять, почему я так решил.
Изображение

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 99

    TopList