Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

Частичная прозрачность   Найти похожие ветки 

 
маленький человек   (2005-10-25 05:44) [0]

Доброго времени суток уважаемые... подскажите пожалусто каким образом можно реализовать следующее - частичную прозрачность формы.
Типичным примером является меню "ПУСК". Если поперетаскивать ярлыки из ПУСК->Программы, то  во время перемещения элемент меню будет "градиентно" прозрачным...

Интересно как же это можно сделать самому?

З.Ы. Все вышесказанное относится к ХР...


 
ZeroDivide ©   (2005-10-25 08:52) [1]

Алгоритм:

     R := GetRValue(ColorToRGB(cl));
     G := GetGValue(ColorToRGB(cl));
     B := GetBValue(ColorToRGB(cl));
     Rr := GetRValue(t.Canvas.Pixels[m-dx, n-dy]);
     Gg := GetGValue(t.Canvas.Pixels[m-dx, n-dy]);
     Bb := GetBValue(t.Canvas.Pixels[m-dx, n-dy]);
     R :=(Transparency*R+(100-Transparency)*Rr) div 100;
     G :=(Transparency*G+(100-Transparency)*Gg) div 100;
     B :=(Transparency*B+(100-Transparency)*Bb) div 100;
     t.Canvas.Pixels[m-dx, n-dy] := RGB(R, G, B);

Transparency от 0 до 100. Можешь менять для разных точек в зависимости от их расположения. Таким образом можешь какие угодно градиенты делать.

Есть еще AlphaBlend и AlphaBlendValue у формы, но градиента они тебе не дадут.


 
маленький человек   (2005-10-25 11:25) [2]

Хе... это все прекрастно... но мне бы именно через альфу...?


 
SpellCaster   (2005-10-27 12:05) [3]

form.alphablend:=true;
form.alphablendvalue:=200;


 
Antonn ©   (2005-10-27 12:09) [4]

маленький человек   (25.10.05 5:44)
сам ищу, как так сделать...
есть функция UpdateLayeredWindow, она 32 битный битмап просит, и по алфаканалу пррозрачность выставляет. но плохо то, что после ее использования ни один контрол не виден...


 
vers ©   (2005-10-27 17:23) [5]

компоненты TPngObject и набор компонент PNGComponents могут рисовать 32-битные картинки в формате png, может это поможет?


 
маленький человек   (2005-10-31 13:41) [6]

Может многоуважаемые мастера что подскажут? или неужели они ничего не знают по этому поводу?


 
маленький человек   (2005-11-02 05:32) [7]

up


 
маленький человек   (2005-11-07 05:16) [8]

перевелись мастера делфи :(


 
Antonn ©   (2005-11-07 05:25) [9]

сказали же уже, смотри UpdateLayeredWindow!


 
маленький человек   (2005-11-07 07:21) [10]

Сабж мона?


 
Antonn ©   (2005-11-07 09:14) [11]

мона.


 
маленький человек   (2005-11-07 10:00) [12]

у какой грамотный сабж... ну никогда такого не встречал...


 
маленький человек   (2005-11-07 10:15) [13]

http://www.am-ende.net/delphi/alphaeffects/ - вот тут если кого интересует частичная прозрачность...


 
Antonn ©   (2005-11-07 11:02) [14]

маленький человек   (07.11.05 10:00) [12]
у какой грамотный сабж... ну никогда такого не встречал...

для уточнения: сабж (subject) - тема. Спросил ты, можно ли "Частичная прозрачность" через UpdateLayeredWindow?


 
маленький человек   (2005-11-07 14:33) [15]

Да... возможно... но я все же скорее всего имел ввиду - сЫрец (source)... недопонимание?

З.Ы. Хотя может и я просто неправильно термин использовал...


 
Antonn ©   (2005-11-07 16:23) [16]

по примеру(из [13]), там также используется UpdateLayeredWindow.
Но проблема, как на битмап скопировать label? У баттона есть paintto(), у прогрессбара есть paintto() а вот у лабела нет. И найдется еще несколько контроллов, которые не так просто изобразить...
при этом, при каждом "задевании"(активация, нажатие, фокус) контроллов, приходится перерисовывать все конроллы на битмап, и обновлять всю форму.


 
Amoeba ©   (2005-11-07 17:33) [17]


> маленький человек   (07.11.05 05:16) [8]
> перевелись мастера делфи :(

А мастерам это просто ни нафиг не нужно. Есть более важные и интересные проблемы, чем такая фигня, как полупрозрачность, а тем более меню.

P.S. Вроде как меню "Пуск" не является настоящим меню Windows, а его имитацией, создаваемой средствами API.


 
маленький человек   (2005-11-08 05:39) [18]


> по примеру(из [13]), там также используется UpdateLayeredWindow.
>
> Но проблема, как на битмап скопировать label? У баттона
> есть paintto(), у прогрессбара есть paintto() а вот у лабела
> нет. И найдется еще несколько контроллов, которые не так
> просто изобразить...
> при этом, при каждом "задевании"(активация, нажатие, фокус)
> контроллов, приходится перерисовывать все конроллы на битмап,
>  и обновлять всю форму.


Как думаете, а если просто попробовать прорисовывать не каждый компоненты отдельно, а все вместе... то есть, допустим, разместили мы все компаненты на форме и делать не для каждого paintto(), а делать битмэп все формы и его уже для него делать paintto() ?


 
маленький человек   (2005-11-08 05:40) [19]

И если вы найдете пути решения проблемы прорисовки всех компонентов то сообщите пожалйсто...


 
маленький человек   (2005-11-08 07:19) [20]

И можно посмотреть результатов которых удалось достич вам?


 
Antonn ©   (2005-11-08 07:38) [21]

маленький человек   (08.11.05 5:39) [18]
а делать битмэп все формы и его уже для него делать paintto()

у лабела нет paintto(), только через канвасы плясать, да drawtext()
маленький человек   (08.11.05 7:19) [20]
И можно посмотреть результатов которых удалось достич вам?

без кода, могу программку показать(223Кб) которую написал с помощью этих функций, надо?
Но там лабелов нет.


 
маленький человек   (2005-11-08 10:49) [22]

Если можно, но почему без кода? жалко?


 
Antonn ©   (2005-11-08 15:29) [23]

маленький человек   (08.11.05 10:49) [22]
Если можно, но почему без кода? жалко?

угу:)
http://an-files.narod.ru/ss.rar
прога расписание отображает.


 
маленький человек   (2005-11-09 06:21) [24]

Весьма и весьма солидно! а можно все же очень... ну ОЧЕНЬ вежлево и жалобно попросить исходник??? :) думаю ни одному мне будет интересно как это было сделано... если прям совсем ну НИКАК низя дать исходник, мож возможно вы сделаете просто форму которая будет выглядеть как ваша? а то прям слюнками истекаю... :)


 
Antonn ©   (2005-11-09 09:00) [25]

а что в самой форме интересует?


 
маленький человек   (2005-11-09 09:25) [26]

ну ваши забавные кнопочки... то какие образом вы это прорисовывали (компаненты или в рантайме)... так работали с UpdateLayeredWindow... задача, как говорится, одна, а пути решения разные :)


 
Antonn ©   (2005-11-09 10:56) [27]

кнопочки - картинки. Вот, повырезал что смог:)
http://an-files.narod.ru/2.rar


 
маленький человек   (2005-11-09 11:39) [28]

странно почему-то у меня не выводятся надписи в этом примере...

 with bF.Canvas do begin
   pen.Color:=clBtnShadow;
   moveto(0,25); lineto(0,0); lineto(bF.width-1,0); lineto(bF.Width-1,25);
   Brush.Style:=bsclear;
   textout(5,(25-textheight("Р")) div 2, "Расписание");
 end;


 
маленький человек   (2005-11-09 11:45) [29]

А есть вариант отоброжения обычных компонентов кроме как PaintTo?


 
маленький человек   (2005-11-09 12:23) [30]

А ну все... с текстом номально... сделал просто так:

   Font.Color := clBlack;
   Rec := Rect(5, 5, bF.Width, 25);
   DrawText(bF.Canvas.Handle, PChar("Расписание"), length("Расписание"), Rec,DT_LEFT or DT_NOPREFIX or DT_WORDBREAK);


вместо textout...

Но вот как быть с кнопками, панелями и другими компонентами... ?


 
маленький человек   (2005-11-09 12:41) [31]

А ну все... разобрался как прорисовать... просто искать все компоненты, и если у них нет конваса то создать его...  и нарисовать :)


 
Antonn ©   (2005-11-09 13:11) [32]

маленький человек   (09.11.05 12:23) [30]
Но вот как быть с кнопками, панелями и другими компонентами... ?

а хз:)
мне надоело искать, я просто картинками понавставлял:)


 
маленький человек   (2005-11-09 13:27) [33]

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


 
Antonn ©   (2005-11-09 16:25) [34]

маленький человек   (09.11.05 13:27) [33]
каждый раз заного прорисовывал и все?

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



Страницы: 1 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.058 c
2-1132312364
Timon777
2005-11-18 14:12
2005.12.04
ShellExecute и фокус нового окна


2-1131939950
stef
2005-11-14 06:45
2005.12.04
Шестнадцатиричные числа


2-1131960085
alsov
2005-11-14 12:21
2005.12.04
Перевод Variant в TDate


5-1114449399
FunkyByte
2005-04-25 21:16
2005.12.04
Как отключить модуль от пакета?


14-1131633246
seg
2005-11-10 17:34
2005.12.04
Первопроходцы интернета Винт Серф и Боб Кан получили высочайшую н