Подскажите, как узнать цвет пиксела за моей формой. То есть, надо узнать, цвет точки, допустим, рабочего стола (или окна и т.д.) за определенной точкой формы (форма перекрывает его).
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
05-08-2005 10:59
В обработчике сообщения WM_PAINT ты сможешь получить доступ к пикселам экрана под формой, но только в том случае, если у формы стоит стиль WS_EX_TRANSPARENT. Его можно указывать при создании окна средствами API, функция CreateWindowEx, либо попробовать устанавливать свойство AlphaBlend в true (только Delphi 6.0), либо воспользоваться API функцией SetWindowLong(Handle,GWL_EXSTYLE,GetWindowLong(Handle,GWL_EXSTYLE) or WS_EX_TRANSPARENT);. Можно сохранить этот массив и пользоваться им в промежутке, когда форме не приходит сообщение WM_PAINT. Пиксели можно получать функцией GetPixel(HDC,X,Y);, где X,Y - координаты пикселя в экранных координатах, HDC:=GetDC(GetDesktopWindow);
И всё-таки, за формой пикселов не существует, если только она не сделана полупрозрачной. Это слишком расточительно - тратить время на рисование пикселов, которые всё равно не будут видны.
Вопрос некорректен. ЗА формой пикселов НЕ СУЩЕСТВУЕТ. Можно узнать, какой там был пиксел, ДО ОТКРЫТИЯ формы. Серьезно? :) Вы расскажите это программистам Мелкософта, которые осуществили еще в W2000 альфа смещивание:
Result[x,y]:=FormCanvas[x,y]*Canvas[x,y]*alphalevel, где Canvas[x,y] - нужное мне значение.
(support@microsoft.com)
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.