Что нового

[Элементы GUI] Запрос на новую функцию: PixelChecksumBorder ()

akoulev

Новичок
Сообщения
167
Репутация
2
Полагаю, что была бы полезной (а для меня - так крайне полезной) функция PixelChecksumBorder() - почти такая же, как PixelChecksum(); отличие в том, то при запуске этой функции, отображалась бы полупрозрачным подсвечиванием граница рамка (Border) считываемого функцией прямоугольника. Можно сказать, что функция PixelChecksumBorder() будет включать в себя функцию PixelChecksum(), дополняя её отображением полупрозрачной рамки.
Толщина, прозрачность, цвет рамки и время отображения рамки должны задаваться передаваемыми в функцию параметрами:
1) При неуказанной толщине, толщина = 5 пикселей;
2) При неуказанной прозрачности, прозрачность = 200;
3) При неуказанном цвете рамки, цвет рамки - ярко-зелёный.
4) При нулевой длительности (времени отображения рамки), рамка должна оставаться на экране до завершения скрипта.
Что характерно: рамка подсветки должна быть извне зоны считываемого прямоугольника, для корректной (неискажённой) отработки PixelChecksum(). Таким образом, зона обрабатывания функцией PixelChecksumBorder() должна автоматически становиться больше зоны, передаваемой в параметрах, - на удвоенную толщину рамки (сверху+снизу; слева+справа). При этом, зона обработки PixelChecksum-ом остаётся прежней - той, что передаётся в параметрах. Возможно, что понадобится зону рамки отодвинуть даже ещё на 1 пиксель в каждую сторону, для гарантированного разнесения зоны рамки и зоны считывания.
Возможные проблемы при реализации:
1) когда зона считываемого прямоугольника находится вплотную к границе экрана. В этом случае, подсветка будет только с 3-х (2-х, если в уголке) сторон.
2) когда зона считываемого прямоугольника находится _почти_ вплотную к границе экрана. В этом случае, толщина рамки с "обиженной" (зажатой) стороны будет равна толщине зазора между зоной считываемого прямоугольника и краем экрана.

Hint: в идеале, добавить ещё 2 параметра: [0/1/2]:
0 - рамка не реагирует на мышь, дожидаясь окончания таймаута.
1 - рамка исчезает по клику на ней или внутри неё [default]. (Окончание по таймауту - в силе).
2 - рамка исчезает по наведении курсора мыши на неё или внутрь неё. (Окончание по таймауту - в силе).

0 - рамка не реагирует на HotKey. (Окончание по таймауту - в силе).
1 - рамка исчезает по HotKey [default]. (Окончание по таймауту - в силе).
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
akoulev, наконец-то я понял, что ты хочешь сделать. Это индивидуальная задача и поэтому вряд ли когда-нибудь разработчики добавят подобную функцию. Но посмотри на следующий код.

Код:
#Include <WinAPI.au3>
#Include <WindowsConstants.au3>

$hForm = GUICreate('', 120, 120, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
GUISetBkColor(0xFF00FF)
GUICtrlCreateLabel('', 10, 10, 100, 100)
GUICtrlSetBkColor(-1, 0xABABAB)
GUISetState()

_WinAPI_SetLayeredWindowAttributes($hForm, 0xABABAB, 128, BitOR($LWA_COLORKEY, $LWA_ALPHA))

Do
Until GUIGetMsg() = -3


Тебе остается только передвинуть окно ($hForm) в нужное место и изменить его размеры. После этого можешь спокойно использовать PixelChecksum() внутри рамки. Надеюсь ты с этим сам разберешься.


Добавлено:
Сообщение автоматически объединено:

akoulev сказал(а):
...в идеале, добавить ещё 2 параметра: [0/1/2]:
0 - рамка не реагирует на мышь, дожидаясь окончания таймаута.
1 - рамка исчезает по клику на ней или внутри неё [default]. (Окончание по таймауту - в силе).
2 - рамка исчезает по наведении курсора мыши на неё или внутрь неё. (Окончание по таймауту - в силе).

0 - рамка не реагирует на HotKey. (Окончание по таймауту - в силе).
1 - рамка исчезает по HotKey [default]. (Окончание по таймауту - в силе).

Вообще-то это уже целая программа, а не функция.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
370
http://autoit-script.ru/index.php?topic=1939.msg14480#msg14480

To Yashied
Внутри окно которое ты нарисовал нельзя кликнуть :smile:, в общем поколдовал и сделал нечто :wacko: , но рабочее :IL_AutoIt_1:
 
Верх