Форум: "Прочее";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
ВнизИ снова про полупрозрачность :-((( Найти похожие ветки
← →
TIF © (2008-04-07 16:24) [0]Блин, окончательно запутался... Отрисовал форму с полупрозрачностью, используя в качестве образца PNG-картинку... Тут исходники тоже выкладывали... Конечно же UpdateLayeredWindow всё хорошо рисует, но контролы после этого естественно перестают отрисовываться. Читал кучу статей и смотрел по ссылкам, но видел только общие фразы "заставить отрисовываться контролы", а примеры есть только на асме или с#...
В MSDN просьба не отсылать, смотрел уже...
Как наиболее простым способом орисовать, например, после UpdateLayeredWindow на такой "модифицированной полупрозрачностью" форме хотя бы КНОПКУ?
← →
TIF © (2008-04-07 16:55) [1]PainTo не катит ни коим образом, хотя многие рекомендуют делать через него (((
← →
wicked © (2008-04-07 17:02) [2]открыть DC, послать контролу WM_PAINT и передать этот DC в параметре wParam
работать будет на всех, кроме rich edit
← →
TIF © (2008-04-07 17:22) [3]
> открыть DC
а в DC то что занести? Туплю, но не понимаю
← →
antonn © (2008-04-07 17:22) [4]paintto ведь делает тоже самое...
← →
TIF © (2008-04-07 17:44) [5]Интересно, а как всё это делали в Vista? :)))
Может быть, тоже под ядро залезть и к видяёке поближе )))
Жесть... И что самое интересное, 4 человека из 10 этим интересуются %-)
> paintto ведь делает тоже самое...
Честно: не знаю )
Сейчас юзаю один пример... Может быть что и получится, хотя не очень верится :(
← →
Andy BitOff © (2008-04-07 17:53) [6]Получится - отпиши пример.
← →
antonn © (2008-04-07 17:56) [7]все равно paintto не рисует контролы и еще что то там. были проблемы с курсорами, с выделением текста в edit и еще что то.
проще свой tedit написать...
← →
TIF © (2008-04-07 18:12) [8]
> Получится - отпиши пример.
Хрен получится, я уже не врубаюсь...
> открыть DC, послать контролу WM_PAINT и передать этот DC
> в параметре wParam
> работать будет на всех, кроме rich edit
Открыть DC -DC: HDC
Послать - SendMessage, а хандлы в параметрах какие передавать? И DC как сюда засунуть %-(
← →
antonn © (2008-04-07 18:13) [9]так чтоли?
Memo1.Perform(WM_ERASEBKGND, canvas.Handle, 0);
Memo1.Perform(WM_PAINT,canvas.Handle,0)
← →
TIF © (2008-04-07 18:19) [10]
> Memo1.Perform(WM_ERASEBKGND, canvas.Handle, 0);
> Memo1.Perform(WM_PAINT,canvas.Handle,0)
Ни фига, Memo так и не появилось... Канва после UpdateLayeredWindow, как я понял, вообще неактуальная
← →
antonn © (2008-04-07 18:21) [11]после UpdateLayeredWindow ничего не актуально, финт в том, чтобы нарисовать контрол до нее на выводимом битмапе. Пока же я просто хочу понять, как заставить выводиться контрол не на форме, а на другом DC (со всеми курсорами, скролбарами, веделениями и тп), чтобы отрисовать его на битмапе и потом битмап вывести в ULW.
← →
antonn © (2008-04-07 18:22) [12]и темку я подобную уже давно создавал, и никто не знает :)
поэтому нужно написать свой контрол (у меня прока проблема с полями ввода - tdit/tmemo, т.к. всякие кнопочти написать вручную довольно просто) :)
← →
Дмитрий С (2008-04-07 18:26) [13]Есть идея:
Над нашим окном держать еще одно окно с постоянной непрозрачностью равной 0 (или 1). Таким окнам винда передает сообщение WM_Paint. Ловить их и обрабатывать =)
← →
TIF © (2008-04-07 18:29) [14]
> Над нашим окном держать еще одно окно с постоянной непрозрачностью
> равной 0 (или 1). Таким окнам винда передает сообщение WM_Paint.
> Ловить их и обрабатывать =)
только что рассматривал примерчик с двумя окнами. Есть и пример с копированием заднего фона как картинки, применения к нему эффекта и вставки на форму. Работает. но есть небольшие тормоза, если не пришлядываться, то незаметно... Правда и комп у меня скоростной...
Могу код в студию, если кому надо...
Блин, на асме такие приеры, а на делфе никто ничего путного не выложил...
← →
Дмитрий С (2008-04-07 18:31) [15]
> асме такие приеры
Так там контролы полюбому самодельные=)
← →
antonn © (2008-04-07 19:02) [16]
> Есть и пример с копированием заднего фона как картинки,
> применения к нему эффекта и вставки на форму.
код с королевства? костыль, большой деревянный достыль :)
← →
TIF © (2008-04-07 19:16) [17]
> код с королевства? костыль, большой деревянный достыль :
> )
да-да, знаю, он ещё 1999 года 8-) Но так-то норм )))
Ща тут присмотрел примерчик, вот он, КЛАСС
Только подскажите, как убрть этот ужасный цвет clFuchsia, что-то понять не могу, где он прописан (((
http://www.infodelphi.narod.ru/png.7z (239kb with EXE)
Источник: C:\Users\Тишкин Андрей\Desktop\ПОЛУпрозрачность\Форум программистов [Powered by Invision Power Board].mht
← →
TIF © (2008-04-07 19:25) [18]
> Источник: C:\Users\Тишкин Андрей\Desktop\ПОЛУпрозрачность\Форум
> программистов [Powered by Invision Power Board].mht
упс ))) не ту ссылку дал)))
http://forum.vingrad.ru/act-ST/f-85/t-54390.html
← →
antonn © (2008-04-07 21:05) [19]транспарент_колор включи :)
там создается еще одна форма, парент у нее основная форма, с "прозрачным цветом", а вторая форма обрабатывается ulw :)
← →
antonn © (2008-04-07 21:14) [20]хитро, я не догадался :)
интересно, какие грабли могут быть...
← →
TIF © (2008-04-07 22:06) [21]
> транспарент_колор включи :)
> там создается еще одна форма, парент у нее основная форма,
> с "прозрачным цветом", а вторая форма обрабатывается ulw
> :)
Это я уже догадался :) Давно, с самого начала заподозрил, а потом врубился, где фон менять и всё такое...
Меня сейчас интересует, как этими двумя формами взаимодействовать как одной :) Чтобы и ширину менять и всё такое... мучаюсь сижу ;-) Тут смещение идёт... Завтра, видимо, н свежую голову быстрее дойдёт, как это одним махом сделать
> хитро, я не догадался :)
> интересно, какие грабли могут быть...
Что хитро? про 2 формы? ) А грабли... Особых - не будет... Пока всё норм, только заметил, какая-то непостоянная ошибка, может вылезти посрелине кода, если размер png-картинки больше скольки-то пикселей, гдето больше 300... ? Кто его знает, что это такое... Затра, затра, затра...
PS: Вы хоть скажите, стоит ли вообще с таким способом возиться? С этими 2-формами-маскими?
Или всё-таки ещё поискать? А то мне особо думать и разыскивать некогда, надо уже скоро готовую EXE-ху получить...
Кстати, способ с 2 формами мне уже давно ркомендовали, но просто выглядело это сумасшедшим предложением, а сейчас вроде спокойно к этому отношусь. Хм, странно :)
← →
antonn © (2008-04-07 22:10) [22]я просто не догадался сделать ее парентом у другой формы :)
все остальное фигня в принципе, все эти ресайзы и тп.
кстати, я ресурсы стараюсь хранить в bmp (ну и свой формат хранения с поддержкой того же zlib, получается png :) ), не надо мучиться потом с "неизвестными ошибками png" :)
← →
TIF © (2008-04-07 22:45) [23]Про Parent: попробовал поэкспериментировать, ерунда полная получается...
← →
TIF © (2008-04-08 16:24) [24]Удалено модератором
Примечание: Создание пустых сообщений
← →
Sloosar (2008-05-14 10:05) [25]Можно очень просто добится полупрозрачности. Нужно взять и перебрать каждый пиксель заднего и переднего фона, вичеслить для них среднее значение цвета и фсё.
Например
function TForm1.midlecolor(a, b: tcolor): Tcolor;
var r1,g1,b1,r2,g2,b2,r3,g3,b3 : byte;
begin
r1:=a;
g1:=a shr 8;
b1:=a shr 16;
r2:=b;
g2:=b shr 8;
b2:=b shr 16;
r3:=(r1+r2) div 2;
g3:=(g1+g2) div 2;
b3:=(b1+b2) div 2;
midlecolor:=rgb(r3,g3,b3);
end;
for i:=400 to 700 do
for j:=96 to 146 do
newgame.Canvas.Pixels[i-399,j-95]:=midlecolor(
newgame.Canvas.Pixels[i-399,j-95],
image1.Canvas.Pixels[i,j]);
← →
antonn © (2008-05-14 12:25) [26]
> вичеслить для них среднее значение цвета и фсё.
костыль, причем тяжелый и не поворотливый...
← →
TIF © (2008-05-14 15:30) [27]
> Можно очень просто добится полупрозрачности. Нужно взять
> и перебрать каждый пиксель заднего и переднего фона, вичеслить
> для них среднее значение цвета и фсё.
Фсё?! Ужасть... Ты хоть представил, как это будет тормозить и перерисовываться? К тому же такой пример (ну, подобный) выложен на Королевстве, я его уже пробовал
И к тому же тот способ, с двумя формами нормально работает. Правда, если раз пять быстро пощёлкать по форме, которая сверху, она мигнёт, перерисуется... Конечно, это плохо, но избавиться от этого чуда никак
Виста, не виста, но что-то получилось ;)
← →
@!!ex © (2008-05-14 15:31) [28]> И к тому же тот способ, с двумя формами нормально работает.
> Правда, если раз пять быстро пощёлкать по форме, которая
> сверху, она мигнёт, перерисуется... Конечно, это плохо,
> но избавиться от этого чуда никак
Неужели двойная буфферизхация не помогает?
← →
TIF © (2008-05-14 15:35) [29]
> двойная буфферизхация
С таким чудом ещё не встречался... А поможет ли она, если используется не одна, а две формы? Одна над другой...
← →
@!!ex © (2008-05-14 15:37) [30]> [29] TIF © (14.05.08 15:35)
Она позволяет избежать мерцания.
А поможет или нет - не знаю, никогда не заморачивался с прозрачностью.
← →
TIF © (2008-05-14 15:45) [31]
> Она позволяет избежать мерцания.
> А поможет или нет - не знаю, никогда не заморачивался с
> прозрачностью.
Хм, а там это и используется, для сохранения фона в буфер (1) и изображения формы в другой буфер (2)...
Значит, не помогает
Ну, конечно, идеальный вариант, написать драйвер ;) И работать с видеоплатой напрямую... Но мечтать не вредно
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.043 c