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

 
Как сделать окно прозрачным?, Как сделать окно прозрачным?
serg128
Отправлено: 25.01.2005, 14:46


Дежурный стрелочник

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



Т.е. проблема у меня такая:
Есть окно, на нём размещён компонент TRxGIFAnimation (RX). Как можно сделать это окно прозрачным, чтоб виднелось только одно изображение?
Буду благодарен за кусок кода! Пасиба smile.gif
Gedeon
Отправлено: 25.01.2005, 17:16


Ветеран

Группа: Модератор
Сообщений: 1742



Если ВСВ 6, то свойство AlfaBlend, иначе тоже можно поискать.
serg128
Отправлено: 25.01.2005, 18:14


Дежурный стрелочник

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



Мне нужно чтобы форма была невидимая, а всё, что на ней — видимое.
Konstantine
Отправлено: 25.01.2005, 18:31


Мастер участка

Группа: Модератор
Сообщений: 545



TransparentColor — выставляешь какой-то (какой хошь) цвет и всё, что на форме таким цветом — стане полностью прозрачным
serg128
Отправлено: 25.01.2005, 19:00


Дежурный стрелочник

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



Не помогло. Сделал форму чёрным цветом, потом
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 255, 80, LWA_ALPHA);

и тот же эффект.
beetlehead
Отправлено: 25.01.2005, 19:12


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

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



Как я делал. Кидаю на форму картинку, которая имеет вид окна со всяческими выпиндронами, типа скруглений, а неотображаемый цвет залит скажем зеленым. У формы выбираю TransparentColor в true, а цвет, который не хочу видеть-прозрачный(зеленый) выбираю в свойстве TransperantColorValue (у меня clLime). Ерунда тут в том, что у формы не должнео быть границ, т.е. BorderStyle=bsNone. Иначе видно заголовок и границы.
ЗЫ. При выборе цвета для прозрачности, выбирай реже всего используемый на форме(не встречающийся). А то как выберешь черный, у тебя весь текст прозрачным будет. (Прикольно смотриться) smile.gif
Rius
Отправлено: 25.01.2005, 20:12


Мастер участка

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



Можно попробовать через регионы:
CODE
HRGN regn1 = CreateRoundRectRgn(0,0,Width+1,Height,2,2);
if(this->Parent != NULL)
 SetWindowRgn(this->Handle,regn1,true);

Нормальная прозрачность есть только в Windows 2000 и выше.
AVC
Отправлено: 26.01.2005, 08:56


Ветеран

Группа: Модератор
Сообщений: 1583



Вот пробегала мимо статья на эту тему (не без мелких изъянов, но как метод — вполне)
Окна нестандартной формы
Gal
Отправлено: 26.01.2005, 19:49


Станционный диспетчер

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



1) ВАРИАНТ (от левого, правого и верхнего края 10, а размер 100


HRGN R1 = CreateRectRgn(0, 0, Width, Height);
HRGN R2 = CreateRectRgn(10, 100, Width-10, Height-10);
CombineRgn(R1, R1, R2, RGN_DIFF);
SetWindowRgn(Handle, R1, TRUE);

2) если 2000 или ХР

void FuncTransparency(HWND Handle, int Percent)
{
if ((Percent < 101) && (Percent> 0))
{
int Transparency;
long ExtStyle;

Transparency = Percent;//насколько прозрачным будет окно (1-100%)
ExtStyle = GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Handle, GWL_EXSTYLE, ExtStyle | WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 0 , (255 * Transparency) / 100, LWA_ALPHA);
}
}

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