Вы не пишете в какой ОС у вас проблемы с артефактами после очистки.
По крайней мере, с активированной композицией рабочего стола очень плохая идея рисовать прямо на рабочем столе и рисовать XOR (см. «Рисование и чтение с экрана - Baaaad!» В этом сообщении в блоге ). Помимо негативного влияния на производительность, вы не можете быть уверены, что происходит одновременно с другой картиной и какие эффекты и анимации влияют на отображаемый контент, поэтому простого XOR может быть недостаточно для полного удаления всего.
Одним из возможных способов реализации этого было бы прозрачное оверлейное окно размером с рабочий стол, и рисовать на нем селектор с резинкой. Если все изменения размера будут достаточными, аннулируйте все окно, стереть старую строку выбора не нужно. Если наложение будет удалено, линия также исчезнет. Композиция рабочего стола обеспечит отсутствие мерцания. Однако переключение приложений при выборе области будет проблематичным, вам необходимо это уловить и немедленно отменить выбор.
Edit:
Я только что протестировал его с Delphi 2009 и со следующим тестовым приложением:
- форма с
FormStyle
, установленным на fsStayOnTop
и с AlphaBlend
, установленным на True
- с переопределенным методом
CreateParams()
для добавления флага WS_EX_TRANSPARENT
расширенного стиля
Я могу передавать все щелчки мышью до нижележащих окон, но при этом могу рисовать в окне поверх них. Это должно начать вас.