вот мой код для уменьшения прозрачности:
Код:
procedure TForm1.DisAppearTimerTimer(Sender: TObject);
begin
dec(trans,(255-AlphaV) div 15); //trans-глобальная переменная типа byte. div 15 не обязательно-у меня это для скорости
Form1.AlphaBlendValue := trans; //в AlphaV хранится нужное значение прозрачности
if ali>AlphaV then //если текущая прозрачность меньше нужной
exit; //то выходим
trans := AlphaV; //на всякий случай
Form1.AlphaBlendValue := trans;
DisAppearTimer.Enabled:=false; //все уже сделано. вырубаем
end;
end;
для увеличения аналогично:
Код:
procedure TForm1.AppearTimerTimer(Sender: TObject);
begin
if (trans<255)And not(DisAppearTimer.Enabled) then //если не сделать проверку то будет нехорошо
begin
inc(trans,(255-AlphaV) div 15);
Form1.AlphaBlendValue := trans;
end;
if trans<255then
exit;
trans:=255;
Form1.AlphaBlendValue := 255;
AppearTimer.Enabled:=false;
end;
чтобы это работало, нужны обработчики событий AppActivate и AppDeactivate для изменения прозрачности при потере или получении фокуса или FormShow если надо только при появлении. Таймеры по умолчанию должны быть выключены!!!:
Код:
procedure TForm1.AppActivate(Sender: TObject);
begin
Form1.AppearTimer.Enabled:=True;
end;
procedure TForm1.AppDeactivate(Sender: TObject);
begin
Form1.DisAppearTimer.Enabled:=True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnActivate := AppActivate; //присваиваем процедуры проге
Application.OnDeActivate := AppDeactivate;
end;
//ИЛИ
procedure TForm1.FormShow(Sender: TObject);
begin
Form1.AppearTimer.Enabled:=True;
end;