Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > hex цвет


Автор: eldar22 26.9.2009, 01:37
Здравствуйте!
Не как не могу использовать hex цвета вернее его обозначение 
Код

Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
Dim s As Long, d As Long

Private Sub Form_Load()
d = RGB(0, 0, 0)  то есть здесь можно было  использовать hex цвет (FFFFFF)

End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
s = SetPixel(Picture1.hdc, X / 15, Y / 15, d)
Picture1.Refresh
End Sub


А вот как перевести  RGB  в hex  чтобы можно было вводить  значение hex цвета (FFFFFF)

Автор: iff 26.9.2009, 07:43
Цитата

А вот как перевести  RGB  в hex  чтобы можно было вводить  значение hex цвета (FFFFFF) 

Я так понял вам надо перевести значение RGB в значение hex?
Тогда так:

В этом коде используются переменные:
R - значение красного цвета (от 0 до 255 или от &H00& до &HFF&)
G - значение зелёного цвета (от 0 до 255 или от &H00& до &HFF&)
B - значение синего цвета (от 0 до 255 или от &H00& до &HFF&)
C& - значение цвета в формате hex (от &H000000& до &HFFFFFF&)
Код

C& = B * &H10000& + G * &H100& + R&

Автор: eldar22 26.9.2009, 11:21
Нет не просто перевести 
просто у меня есть значение hex цвета FFCCCC мне надо ввести это значение в textbox нажать кнопку и setpixel начнёт рисовать этим цветом

Автор: iff 26.9.2009, 16:34
Т.е. вы вводите в текстбокс шестнадцатиричное число, нажимаете кнопку, и водя мышкой по пикчербокс рисуете цветом, который ввели в текстбокс?
тогда так:
На форме имеется пикчебокс Picture1, кнопка Command1, текстовое поле Text1. Эти объекты имеют свойства, заданные по умолчанию, кроме Picture1.AutoRedraw, оно ровно True
Теперь код:
Код

Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
Dim d As Long, N As Long, Col As String

Private Sub Command1_Click()
d = 0
Col = UCase(Text1.Text)
For i = 1 To 6
 If Mid(Text1.Text, i, 1) <> Val(Mid(Text1.Text, i, 1)) Then
  N = Asc(Mid(Col, i, 1)) - 55
 Else
  N = Val(Mid(Col, i, 1))
 End If
 d = d + N * (16 ^ (i - 1))
Next i
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
SetPixel Picture1.hdc, X / 15, Y / 15, d
Picture1.Refresh
End Sub

Но можно использовать и штатные функции ( не присоединять библиотеку gdi32). Функцией PSet можно добиться таково же результата (здесь свойство Picture1.AutoRedraw может быть ровно и False, от этого программа не перестанет рисовать):
Код

Dim d As Long, N As Long, Col As String

Private Sub Command1_Click()
d = 0
Col = UCase(Text1.Text)
For i = 1 To 6
If Mid(Text1.Text, i, 1) <> Val(Mid(Text1.Text, i, 1)) Then
N = Asc(Mid(Col, i, 1)) - 55
Else
N = Val(Mid(Col, i, 1))
End If
d = d + N * (16 ^ (i - 1))
Next i
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.PSet (X, Y), d
End Sub

Только вот и в первом, и во втором случае, если быстро вести мышкой, то рисуется не линия, а ряд точек. Это можно исправить применяя функцию Line

Автор: eldar22 26.9.2009, 17:46

iff
 smile 
вы свой плюсик заслужили!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)