Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.037 c
4-1081873607
AlDan
2004-04-13 20:26
2004.05.30
Показ процесса копирования файлов


14-1084258208
Тимохов
2004-05-11 10:50
2004.05.30
Впечатления о memory maneger е.


1-1084979158
TRX
2004-05-19 19:05
2004.05.30
zadachka v turbo pascal


14-1083889805
Думкин
2004-05-07 04:30
2004.05.30
С днем рождения! 7 мая


14-1084352873
}|{yk
2004-05-12 13:07
2004.05.30
Выбор лингвистического обеспечения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский