Прозрачный фон TGroupBox

2 минуты на чтение

Многие задавались вопросом — А как же сделать прозрачный фон в TGroupBox. Этот прозрачный фон и вовсе ненужен, если Вы в своей программе используете скины например, то есть готовые компоненты, которые позволяют скинизировать Вашу программу, а также если Вы не используете никакого дизайна в своей программе. А теперь давайте поступим так, установите на форму компонент TImage и в свойстве Align задайте — alClient. Теперь в свойстве Picture компонента TImage загрузите какую-нибудь фотографию. Отлично, многие с помощью данного компонента делаю себе дизайн программы, как в частности я сделал в AS ImageDecoder. Теперь давайте на наш компонент TImage установим компонент TLabel. Отлично теперь скомпилируем программу и видим, какой некрасивый фон написана Caption TLabel. Но тут решается все просто, у данного компонента (TLabel) есть замечательное свойство — Transparent, при установки которого в значение True, убирается данный фон и становится прозрачным. Такого в компоненте TGroupBox например нету и если мы его установим на TImage, увидим тоже самое, что не красиво смотрится и фон не прозрачный.

Чтобы исправить это (чтобы фон был прозрачным), предлагаю написать следующий код на событие формы OnCreate

procedure TForm1.FormCreate(Sender: TObject);
begin
try
GroupBox1.Brush.Style:=bsClear;
SetWindowLong(GroupBox1.Handle,GWL_EXSTYLE,GetWindowLong(GroupBox1.Handle,GWL_EXSTYLE) or WS_EX_TRANSPARENT);
InvalidateRect(GroupBox1.Handle,NIL,True);
except
on e:Exception do
end;
end;

Мы тут очищаем стиль кисти и затем устанавливаем для хэндла TGroupBox значение TRANSPARENT, то есть прозрачность и с помощью InvalidateRect перерисовываем его, конечно скомпилировав наш проект, мы увидим, что текст написанный в Caption - TGroupBox находится в непрозрачном фоне, как первоначально и TLabel, что очень не красиво.

Как видите фон самого TGroupBox стал прозрачным, и теперь можем помещать в него любые компоненты и будет отлично все, но что делать с заголовком? Предлагаю так решить проблему, вообще убираем наш заголовок, и ставим на форму TLabel и устанавливаем у данного компонента в свойстве Transparent - True, дальше на место заголовка TGroupBox, я ставлю TLabel, почти не заметно, но зато прозрачный фон, это можно применить почти с каждым визуальным компонентом. При определенном фоне можно достичь почти отличного результат, в общем дальше просто включаем фантазию и фанатазируем

Facebook Vk Ok Twitter LinkedIn Telegram