Як отримати будь-який піксель (його колір) на екрані І що таке hdc
Як отримати будь-який піксель (його колір) на екрані? І що таке hdc? Тобто колір пікселя ваще з будь-якого вікна.
функція GetScreenPointColor(X, Y: integer): TColor; var DC: HDC; begin DC := GetDC(GetDesktopWindow); try Result := GetPixel(DC, X, Y) finally ReleaseDC(GetDesktopWindow, DC) end end;
HDC – хендл контексту пристрою. Що це таке – довго розповідати, дивіться концепції графіки Windows.
А Ви часом не знаєте, що є вікно з Handle = 0?
GetDesktopWindow <> 0. часто застосовують GetDC( 0 ).
У сенсі, що це за вікно таке? або 0 - handle неіснуючого вікна?
Handle = 0 – це екран монітора. Виклик GetDC(0) зазвичай застосовується для того, щоб потім через цей HDC отримати поточні налаштування режиму відображення (кількість кольорів, палітру і т.д.). Якщо мені не змінює пам'ять, то через неї можна малювати в будь-якому місці екрана, а також отримувати колір будь-якого пікселя на екрані.
Так, у Delphi для роботи з екраном в цілому можна використовувати глобальний об'єкт Screen, у тому числі звідти можна отримати поточну роздільну здатність екрану, просто вважаючи властивості Screen.Width і Screen.Height. А можна і розмір робочої області без різних панелей знизу або з боків. Докладніше див. Help по Screen.
> Handle = 0 це екран монітора.Екран монітора має Handle?
Звичайно, як невід'ємна частина операційної системи Windows, екран монітора має все. все, що під руки трапиться. так само свій Handle має підставку під монітор і килимок для миші.
> А можна і розмір робочої області (Desktop)Та що ви кажете. а я все життя думав, що властивості TScreen пов'язані з розміром робочої області мають приставку WorkArea.
>Виклик GetDC(0) зазвичай застосовується для того, щоб потім > через цей HDC отримати поточні налаштування режиму відображення > (кількість кольорів, палітру і т.д.).GetDC() - зазвичай застосовується для отримання device context, у разі 0 отримання у desktop'а.
Не знаю (ніколи не займався такими темами, як Multiple Display Monitors, Virtual Desktops тощо), але не виключено, що для таких випадків між GetDC(0) і GetDC(GetDesktopWindow) все ж таки може бути різниця.
Є звичайно. Приблизно та ж, що й між
> Та що ви говорите. а я все життя думав, що властивості TScreen > пов'язані з розміром робочої області мають приставку WorkArea. А я хіба сказав через які властивості виходять розміри робочої області? Я сказав див Help.