Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CLX. Как сделать пиксель формы прозрачным? [D7, Win2k]


Glex ©   (2006-01-17 20:17:00) 

subj


sniknik   (2006-01-19 20:28:00) [1]

нет они отвечают за установку параметров виндовомуокну (чей хендл указан) и перерисовку. а собственно прозрачность реализована "внутри" окна (на уровне системы).

> ... Поэтому сделаю через
> {$ifdef} uses Windows {$endif} и т.п!
терзают меня смутные сомнения... что так вообще получится, и не модуль Windows тому причина.... просто совместить VCL и CLX в одном проекте.... нонсенс. (но дерзай, может у тебя и выйдет... каменный цветок ;о))


Glex   (2006-01-19 20:18:00) [2]

sniknik

^_^

Ну, согласен теперь)
Но проект близок к завершению, а сроки поджимают. Поэтому сделаю через
{$ifdef} uses Windows {$endif} и т.п!
Но вот те две строчки, которые Вы привели, именно они отвечаю за прозрачность?


sniknik   (2006-01-19 09:11:00) [3]

> только этот код для меня тёмный лес *(((
SetWindowLong(Handle, GWL_EXSTYLE, AStyle and not WS_EX_LAYERED);
RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
вот это видиш? это функции windows из модуля windows. помниш что про него тебе говорил?

> Подскажите плз, что отсюда нужно перенести в свою прогу, чтобы области формы опр. цвета стали полностью прозрачными!
из формы создаваемой виндой в форму основаную и создаваемую Qt? (в виндах заменителя от борланда насколько знаю)
НИЧЕГОничего из одного в другом работать не будет.

p.s. при таком подходе "Я пишу для двух сразу)" ты либо должен писать в двух вариантах (две оси, две программы, ...), либо использовать только то что общее для обоих (+ хорошо разбираться в обоих системах на случай доделать то что не доделано борландом в какой нибудь из них).


Glex   (2006-01-19 08:49:00) [4]

Спасибо.
Я пишу для двух сразу)

Итак, раз универсального средства нет, придумал такое решение:
Для Windows - стандартная прозрачность средствами WinApi
Для Linux - средствами линукса

Вопрос по первой части. Как средствами ВинАпи прозрачность реализуется?

Вот что в Forms
procedure TCustomForm.SetLayeredAttribs;
const
 cUseAlpha: array [Boolean] of Integer = (0, LWA_ALPHA);
 cUseColorKey: array [Boolean] of Integer = (0, LWA_COLORKEY);
var
 AStyle: Integer;
begin
 if not (csDesigning in ComponentState) and
   (Assigned(SetLayeredWindowAttributes)) and HandleAllocated then
 begin
   AStyle := GetWindowLong(Handle, GWL_EXSTYLE);
   if FAlphaBlend or FTransparentColor then
   begin
     if (AStyle and WS_EX_LAYERED) = 0 then
       SetWindowLong(Handle, GWL_EXSTYLE, AStyle or WS_EX_LAYERED);
     SetLayeredWindowAttributes(Handle, FTransparentColorValue, FAlphaBlendValue,
       cUseAlpha[FAlphaBlend] or cUseColorKey[FTransparentColor]);
   end
   else
   begin
     SetWindowLong(Handle, GWL_EXSTYLE, AStyle and not WS_EX_LAYERED);
     RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
   end;
 end;
end;

только этот код для меня тёмный лес *(((

Подскажите плз, что отсюда нужно перенести в свою прогу, чтобы области формы опр. цвета стали полностью прозрачными!


sniknik   (2006-01-18 20:25:00) [5]

не там ищеш. ищи в доке по библиотеке Qt (linux). плюс, возможно, NCurces тоже линух. тк. в линуксовых прогах такое видел (прозрачность) а они на них основаны.

и вообще завязывай писать на одной оси для другой оси... т.к. такое пересечение не добавляет возможностей, а наоборот отсекает все несовпадающие...


Glex   (2006-01-18 20:17:00) [6]

TStas
Перечитай вопрос. clx!!!!!!!
________________

Помогите, горю!!!!


TStas   (2006-01-18 20:07:00) [7]

А нельзя проще - поставить свойство Transparent и TransparentColor какой-то редко используемый, ядовито-зеленый, например, а потом нужный пиксел сделать этого цвета и все. АльфаБленд не везде же работает


Glex   (2006-01-18 19:45:00) [8]

Прошу, помогите!!!!!
Думал весь день, смотрел исходники Forms из vcl, занимался всяким шаманством - ничего не помогает!!!
Пожалуйста!


Glex   (2006-01-18 08:26:00) [9]

vip60
Если бы здесь можно было удалять свои посты, я бы тебе именно это посоветовал ;)

Ну так что, никто не знает? Я нигде ответ не могу найти. Придётся думать самому))))


vip60   (2006-01-17 21:09:00) [10]

У формы есть свойство - AlphaBlend! Поставь его в true; А степень прозрачности укажи в свойстве AlphaBlendValue......кстати можно сделать обработку скрола : крутишь вверх - она появляется крутишь вниз-окно исчезает, разместив на форме Браузер-получится офигенная ШПОРА...испытано-работает!!!!


Наверх

Титульная страница Поиск, карта сайта Написать письмо