C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Прозрачная панель, Как сделать TPanel прозрачной?
AlienB
Отправлено: 07.10.2006, 13:45


Ученик-кочегар

Группа: Участник
Сообщений: 4



Собственно, задача:
На форме несколько панелей. На панелях — по нескольку кнопок. Создаются динамически. Панели можно двигать относительноф ормы, кнопки — относительно панелей. Но панели налазят друг на друга, закрывая кнопки. Как сделать панели прозрачными? Кнопки на них должны остаться видны.

Пробовал юзать TImage, но его нельзя прописать Parent'ом для кнопок, т.е. при перемещении TImage кнопки остаются на месте. Можно конечно руками следить за всеми кнопками, которые находятся на TImage, но это ооочень неудобно, да и их может быть очень много.

AlienB
Отправлено: 07.10.2006, 18:28


Ученик-кочегар

Группа: Участник
Сообщений: 4



Неужели вообще идей нет?

Хорошо, другой вопрос: существуют ли вообще прозрачные, реагирующие на нажатие мыши наследники TWinControl?
Admin
Отправлено: 07.10.2006, 20:19


Владимир

Группа: Администратор
Сообщений: 1190



У формы TransparentColor = true;
и устанавливаете какой цвет будет прозрачным,
например TransparentColorValue = clGray;

Нужной панели, чтобы она стала прозрачной,
устанавливате этот цвет:

CODE

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Panel1->Color = clGray;
}
//---------------------------------------------------------------------------

когда нужно сделать непрозрачной — возвращаете обычный цвет.


P.S. Не знаю, будет ли это работать под Windows 98,
под 2000 и выше (2003, XP) работать будет.
QUOTE

TransparentColor does not work on all systems. The application must be running under Windows 2000 or better, with adequate hardware.


Или, второй вариант — это работа с регионами.
Это уже было на форуме:
http://cbuilder.ru/forums/index.php?act=ST&f=3&t=3479
http://cbuilder.ru/forums/index.php?act=ST&f=3&t=3527
AlienB
Отправлено: 08.10.2006, 12:01


Ученик-кочегар

Группа: Участник
Сообщений: 4



Веселый эффект, не знал о нем smile.gif

Но это не то что надо. При этом сквозь форму просвечивает то, что за ней.

Мне надо:
Непрозрачная форма. Сверху — прозрачная панель. Сверху — непрозрачные кнопки.

На прикрепленном файле 2 панели, по 1 кнопке на каждой. 1 панель накрывает вторую. Как сделать что бы обе кнопки было видно в такой ситуации?

Отредактировано AlienB — 08.10.2006, 12:02
Admin
Отправлено: 08.10.2006, 20:53


Владимир

Группа: Администратор
Сообщений: 1190



Наверное самое простое — разместить панели на отдельных формах,
в которых(формах) и установить Transparent Color.
AlienB
Отправлено: 09.10.2006, 18:25


Ученик-кочегар

Группа: Участник
Сообщений: 4



Боюсь, что панелей может быть очень много... Несколько сотен например. Или больше.

Готов принять сложное решение. Вплоть до написания собственного компонента. Хотя пока с трудом представляю как это сделать.
Admin
Отправлено: 09.10.2006, 18:31


Владимир

Группа: Администратор
Сообщений: 1190



Значит для панелей — такая одна отдельная форма. (с прозрачностью)
На ней эти панели динамически и создавайте.
(Или 2-3-4 формы под стандартные типоразмеры панелей,
на этих формах панели создавать динамически).

А настройки панелей и формы: размер, местоположение и прочее
можно хранить, например, в ini-файле.

Вернуться в Вопросы программирования в C++Builder