Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с функцией GetPixel в VBA

78K
15 февраля 2012 года
Kelloway
6 / / 15.02.2012
Прошу помочь знающих. Необходимо после щелчка мыши по вставленной на лист картинке (Image) определить цвет пикселя в координатах. Использую функцию GetPixels(HDC,x,y). С х и у проблем нет. А вот где взять Hdc? такого свойства у Image нет.
275
16 февраля 2012 года
pashulka
985 / / 19.09.2004
Когда-то, давным-давно, я решил поставленную задачу следующим образом :

Код:
Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Declare Function FindWindow _
        Lib "user32.dll" Alias "FindWindowA" ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
Private Declare Function GetDC _
        Lib "user32.dll" (ByVal hWnd As Long) As Long
Private Declare Function GetPixel _
        Lib "gdi32.dll" ( _
        ByVal hDC As Long, _
        ByVal X As Long, _
        ByVal Y As Long) As Long
'Private Declare Function SetPixel _
        Lib "gdi32.dll" ( _
        ByVal hDC As Long, _
        ByVal X As Long, _
        ByVal Y As Long, _
        ByVal crColor As Long) As Long
Private Declare Function GetCursorPos _
        Lib "user32.dll" (lpPoint As POINTAPI) As Long
Private Declare Function ScreenToClient _
        Lib "user32.dll" ( _
        ByVal hWnd As Long, _
        lpPoint As POINTAPI) As Long

Private ihWnd As Long, ihDC As Long, iPoint As POINTAPI

Private Sub UserForm_Initialize()
    ihWnd = FindWindow(vbNullString, Me.Caption)
    ihDC = GetDC(ihWnd)
End Sub

Private Sub Image1_Click()
    GetCursorPos iPoint
    ScreenToClient ihWnd, iPoint
    Me.Caption = GetPixel(ihDC, iPoint.X, iPoint.Y)
   
    'SetPixel ihDC, iPoint.X, iPoint.Y, vbRed 'проверка
End Sub
78K
16 февраля 2012 года
Kelloway
6 / / 15.02.2012
Спасибо, я попробую
78K
16 февраля 2012 года
Kelloway
6 / / 15.02.2012
Выдает "-1" для всех цветов. Кстати аналогичное получается если просто задавать там вместо ihDc Image.Picture...
275
16 февраля 2012 года
pashulka
985 / / 19.09.2004
Функция GetPixel в случае ошибки, действительно возвращает -1 , однако, в следующих версиях такого безобразия не наблюдается :

Win98/ME + Office97
WinXP + OfficeXP

78K
16 февраля 2012 года
Kelloway
6 / / 15.02.2012
У меня 10-ка... но цвет-то все равно не определяется(
275
16 февраля 2012 года
pashulka
985 / / 19.09.2004
Посмотрите, что возвращает каждая из API функций, к примеру, если отсутствует текст в заголовке окна, то FindWindow возвратит 0

P.S. OS не указали ;)
78K
16 февраля 2012 года
Kelloway
6 / / 15.02.2012
OS - Windows 7-ка.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог