Форум: "Media";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизИсчезающий Image Найти похожие ветки
← →
Александр1 © (2004-03-10 19:02) [0]Здравствуйте уважаемые мастера! Не подскажите, как сделать так, чтобы рисунок Image или сома Form медленно исчезала и медленно появлялась??
Заранее спасибо!
← →
YuRock © (2004-03-10 19:27) [1]Думаю, прийдется использовать ф-цию SetLayeredWindowAttributes, но есть 2 но:
1. Работать в 95/98 не будет;
2. TImage "погасить" неудастся - можно только окно гасить. Надо гасить окно, на котором лежит TImage.
← →
Александр1 © (2004-03-10 19:30) [2]YuRock Хотя-бы окно! А пимер скинуть можешь????
← →
Diamond Cat © (2004-03-10 19:30) [3]медленно напиваться, а потом медленно трезветь, эфект 100%
На самом деле есть ответный вопрос, а как они должны исчезать, сжиматься в точку, уходить за пределы экрана, становиться прозрачными и т.д.
← →
Александр1 © (2004-03-10 19:33) [4]Diamond Cat Они должны постепенно становиться прозрачными!!!
← →
Darrin © (2004-03-10 19:35) [5]У формы есть 2 свойства:
AlphaBlend и AlphaBlendValue отвечающих за прозрачность
← →
Diamond Cat © (2004-03-10 19:43) [6]с появлением нет проблем, при запуске делаешь скриншот экрана, создаешь пустую форму (далее форма) размерами с онко твоей прогаммы, заливаешь ее полученным скриншотом (с соответствующими координатами) и с помощью допустим bitblt смешиваешь в цикле канву формы и канву окна программы (заливая этим форму), по завершении цикла закрываешь форму и показываешь окно программы, с обратной трансформацией сложнее.
> Darrin ©
под 98-95 AlphaBlend и AlphaBlendValue не работают
← →
YuRock © (2004-03-10 19:46) [7]> Александр1
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
j: Integer;
begin
for j := 255 downto 100 do begin
SetLayeredWindowAttributes(Handle, $00FFFFFF, j, LWA_ALPHA);
Sleep(1);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, $00FFFFFF, 255, LWA_ALPHA);
end;
← →
Александр1 © (2004-03-10 19:51) [8]SetLayeredWindowAttributes(Handle, $00FFFFFF, j, LWA_ALPHA);
Эта строчка ошибку выдаёт!
← →
YuRock © (2004-03-10 19:55) [9]Какую ошибку?
← →
Diamond Cat © (2004-03-10 19:59) [10]
> YuRock ©
а что за процедурка такая SetLayeredWindowAttributes
← →
Александр1 © (2004-03-10 20:02) [11]YuRock Не всё нормально!!!! Просто этот алгоритм работает только по D7, под D5 не работает!
YuRock - Огромное тебе спасибо!
А в абратную сторону не знаешь как?
← →
Diamond Cat © (2004-03-10 20:07) [12]посмотрел в msdn там пишут что, Minimum operating systems Windows 2000 , так что метод не универсален
← →
YuRock © (2004-03-10 20:08) [13]> Александр1 © (10.03.04 20:02) [11]
Думаю, так:
for j := 100 to 255 do begin
SetLayeredWindowAttributes(Handle, $00FFFFFF, j, LWA_ALPHA);
Sleep(1);
end;
← →
YuRock © (2004-03-10 20:10) [14]> Diamond Cat
см. YuRock [1], пункт 1
← →
Александр1 © (2004-03-10 20:16) [15]YuRock - я тоже так подумал! И сделал так!
Но назад то оно не работает!
Ну хоть в перёд и то хлеб!
procedure TForm1.Button1Click(Sender: TObject);
var
j: Integer;
begin
for j := 100 downto 255 do begin
SetLayeredWindowAttributes(Handle, $00FFFFFF, j, LWA_ALPHA);
Sleep(1);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, $00FFFFFF, 100, LWA_ALPHA);
end;
← →
Александр1 © (2004-03-10 20:19) [16]Diamond Cat - в смысле не универсален, чё только под WinNT, 2000 XP сгодится???
← →
YuRock © (2004-03-10 20:25) [17]> Александр1
> я тоже так подумал! И сделал так!
Надо было не поменять местами 100 и 255 а добавить еще один цикл! Т.е.
for j := 255 downto 100 do begin
SetLayeredWindowAttributes(Handle, $00FFFFFF, j, LWA_ALPHA);
Sleep(1);
end;
заменить на
for j := 255 downto 100 do begin
SetLayeredWindowAttributes(Handle, $00FFFFFF, j, LWA_ALPHA);
Sleep(1);
end;
for j := 100 to 255 do begin
SetLayeredWindowAttributes(Handle, $00FFFFFF, j, LWA_ALPHA);
Sleep(1);
end;
> в смысле не универсален, чё только под WinNT, 2000 XP сгодится?
Не только. А только для 2k/XP/03. В предыдущих версиях Windows ф-ции SetLayeredWindowAttributes не было.
← →
Diamond Cat © (2004-03-10 20:26) [18]Win nt тоже не сработает только 2000 и выше
← →
Александр1 © (2004-03-10 20:38) [19]YuRock - Ну да точно! И чё я с начало прогнал?
YuRock - Спасибо ещё раз!
Жаль, что под win 9x не работает.
А других каких нибуть методов не кто не знает, чтобы под win 9x работало???
И чё Microsoft так поздно догадался изобрести SetLayeredWindowAttributes?
← →
Diamond Cat © (2004-03-10 20:44) [20]
> Александр1 © (10.03.04 20:38) [19]
я описал выше способ, причем я уже проходил это, и все работало под любыми виндами
← →
Александр1 © (2004-03-10 20:52) [21]Diamond Cat - Я вообще-то ещё можно так сказать не очень класный программист. Скорее начинающий. Поэтому плохо ещё во всём этом разбираюсь!
Diamond Cat -Напиши пожалуйста пример если можно или если есть готовый скинь на мыло!
← →
Александр1 © (2004-03-10 21:02) [22]Ну так чё ни у кого нет примера, "на все случаи жизни" (под win 9x? NT)????????????????
← →
YuRock © (2004-03-10 21:10) [23]А зачем понадобились 9х? Если это коммерческая программа - то никто и не заметит, что она будет работать не так красиво, как хотел программист. Если "для себя" - вообще не вижу проблемы...
← →
Mihey © (2004-03-10 23:26) [24]Примеры есть, но весьма медленные.
← →
Mihey © (2004-03-11 00:49) [25]В общем, решил тут для общего развития написать. Проблем никаких не было. В общем, задача полупрозрачных окон в Win 9х вполне разрешима. Вот код, там откомпилированный пример, кто хочет - качайте (322 Кб, RAR):
http://www.hot.ee/mvps16/alphaappear.rar
Для блендинга использую asm-процедуру. Походу дела, блендинг идёт даже слишком быстро (а можно было и ещё ускорить), так что надо тормозилку вставить ещё.
← →
Александр1 © (2004-03-11 05:25) [26]YuRock -Ну как зачём надо чтобы программа была универсальная.
← →
Александр1 © (2004-03-11 06:12) [27]Mihey - Вроде пример ничего! Но действительно очень быстро! И чёто он у меня не компилируется!
← →
YuRock © (2004-03-11 10:52) [28]> Александр1 © (11.03.04 05:25) [26]
Универсальной должна быть функциональность программы, а с визуальными эффектами можно и потерпеть на древних операционках.
← →
Александр1 © (2004-03-11 11:15) [29]YuRock - Ну в принципи ты прав!
Ну а всётаки может есть у кого код как заставить работать визуальные эффекты на древних компах???
← →
Mihey © (2004-03-11 15:05) [30]>И чёто он у меня не компилируется!
Какая Delphi у тебя?
>Ну а всётаки может есть у кого код как заставить работать визуальные эффекты на древних компах???
Я те дал код. Хоть у тебя не компилит, принцип то взять ты можешь? Процедура блендинга есть, как экран копировать - есть, что ещё надо?
← →
Mihey © (2004-03-11 20:06) [31]Похоже из-за разницы версий Delphi не компилируется asm код.
← →
Александр1 © (2004-03-12 12:22) [32]А ещё кто-нибуть знает какойнибудь способ разрешения этого вопроса????
← →
Александр1 © (2004-03-14 05:32) [33]Да кажется больше ни кто не знает!
← →
Mihey © (2004-03-14 14:16) [34]>Да кажется больше ни кто не знает!
Правильно, это ж не пиво открывать - открывашкой, ножом, ключом, об острый угол, зубами, проволокой....
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.045 c