serg128 |
Отправлено: 25.01.2005, 14:46 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 46
|
Т.е. проблема у меня такая:
Есть окно, на нём размещён компонент TRxGIFAnimation (RX). Как можно сделать это окно прозрачным, чтоб виднелось только одно изображение?
Буду благодарен за кусок кода! Пасиба |
|
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. Иначе видно заголовок и границы.
ЗЫ. При выборе цвета для прозрачности, выбирай реже всего используемый на форме(не встречающийся). А то как выберешь черный, у тебя весь текст прозрачным будет. (Прикольно смотриться) |
|
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);
}
}
|
|