Бледная личность, или Уходящая натура

А вы можете исчезать и появляться не так внезапно? А то у меня голова идет кругом. - Хорошо, - сказал Кот и исчез — на этот раз очень медленно. Первым исчез кончик его хвоста, а последней - улыбка; она долго парила в воздухе, когда все остальное уже пропало.

Льюис Кэрролл. Приключения Алисы в стране чудес

В «старших» версиях Delphiу формы появилось одно замечательное свой­ство - AlphaBlendValue, -, которое вполне может послужить основой для анимации формы.

Значение этого свойства, равное 0, делает окно абсолютно прозрачным, а максимальное значение 255 - абсолютно непрозрачным. Все промежуточ­ные значения этого свойства придают окну частичную прозрачность, то есть сквозь него будут «просвечивать» окна, находящиеся ниже 

Бледная личность, или Уходящая натура

Полупрозрачные окна хороши уже сами по себе и их вполне можно исполь­зовать в программах для вывода окон справки, настройки, помощи и тому подобных, но мы пойдём ещё дальше и при появлении формы на экране будем постепенно уменьшать её (не)прозрачность от 0 до 255.

Форма появляется на экране совершенно прозрачной:


procedure TForm2.FormShow(Sender: TObject); begin
AlphaBlend:= TRUE;
AlphaBlendValue:= 0; end;

Обратите вниманиечто мы должны установить флажок AlphaBlend, иначе свойство AlphaBlendValue не будет действовать!

Затем в цикле мы плавно уменьшаем прозрачность нового окна (если вы хотите оставить окно слегка непрозрачным, чтобы добавить шарма, то вычтите в выделенной строке некоторое число из значения AlphaBlendValue):


procedure TForm2.FormActivate(Sender: TObject);
var i,n: integer;
begin
n:= 100;
for I := 0 to n do begin
AlphaBlendValue:= 255 * i div n;//-100 delay(10); end; end;

В процедуре delayцикл делает небольшую паузу, чтобы эффект анимации стал доступен человеческому глазу:


//ЗАДЕРЖКА
procedure Delay(MSecs: Longint); var
FirstTickCount, Now: Longint; begin
FirstTickCount := GetTickCount; repeat
Application.ProcessMessages;
Now := GetTickCount; until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount); end;

С точностью до наоборот при закрытии программы мы стираем окно с экрана:


procedure TForm2.FormClose(Sender:
TObject; var Action: TCloseAction); 
var i,n: integer; 
begin 
n:= 100; 
for I := n downto 0 do begin 
AlphaBlendValue:= 255 * i div n;
delay(10); 
end; 
end;

Правда, в отличие от Чеширского Кота от него не останется даже улыбки. Впрочем, может быть, она останется у вас - как результат хорошо сделан­ной работы.

Бледная личность, или Уходящая натура

������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: