Форум: "Основная";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
ВнизЧастичная прозрачность Найти похожие ветки
← →
маленький человек (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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.29 c