Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-1125140900
NikNet
2005-08-27 15:08
2005.12.04
Как отправить письмо на почту Yandex через прокси?


14-1132165050
uw
2005-11-16 21:17
2005.12.04
Глаз и теория эволюции


6-1125044882
DeGlucker
2005-08-26 12:28
2005.12.04
Клиент-сервер(WinXP-Win98)


14-1131834196
Джо
2005-11-13 01:23
2005.12.04
Виталий Кличко завершил проф. карьеру


2-1131884704
Erick
2005-11-13 15:25
2005.12.04
Подбор пароля по двум символам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский