Создание компонента с прозрачным фоном |
![]() |
![]() |
Статьи |
Бывают случаи, когда Вам понадобился компонент с прозрачным фоном, который не будет загораживать изображение позади него. Что для этого нужно сделать? Чтобы сделать это, создайте новое управление, полученное, например от TGroupBox и отмените его метод CreateParams, подобно этому:
Добавьте обработчик сообщения для WM_ERASEBKGND:
Но это справедливо только для TWinControl. Для TGraphicControl не подходит отмена CreateParams (так как только TWinControl имеют этот метод), а нужно отменить конструктор Create. После вызова унаследованного конструктора, нужно изменить ControlStyle управления:
Фактически, прозрачность работает лучше для TGraphicControl, чем для TWinControl. TWinControl будет иметь проблемы, когда управление будет перемещено или фон должен измениться. Контейнерное управление Delphi (типа формы или панели) всегда создается со стилем WS_CLIPCHILDREN, который автоматически исключает область под дочерним управлением от изменений, так что фон не будет модифицироваться, если потребуется. Удаление стиля WS_CLIPCHILDREN из родительского управления возможно с:
Но это может привести к чрезмерным мерцаниям при обновлениях экрана. |