Страница 1 из 1

Проблема с OnActivate

Добавлено: 04 янв 2010, 15:03
Dennis777
Здравствуйте, у меня возникла следующая проблема. Есть форма. На ней растянут Имейдж. Для того, чтобы форма плавно появлялась был написан следующий код:

Procedure TForm1.FormCreate(Sender: TObject);
Begin
Form1.AlphaBlendValue:=0;
Form1.AlphaBlend:=True;
End;

Procedure TForm1.FormActivate(Sender: TObject);
Var i: Integer;
Begin
For i:=1 To 255 Do
Begin
Form1.AlphaBlendValue:=i;
Application.ProcessMessages;
End;
End;

Procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var i: Integer;
Begin
Form1.Enabled:=False;
For i:=254 DownTo 0 Do
Begin
Form1.AlphaBlendValue:=i;
Application.ProcessMessages;
End;
End;

Но тут возникла проблема. При первом открытии форма появляется то плавно, но сперва появляется только одна часть формы, а через пару секунд, открывается пропущенная часть. При последующих открытиях - все нормально. Потом я писал другой код тоже с он Активэйт - и был такой же прикол( Подскажите пожалуйста, как можно избежать появление формы частями или на какое событие можно поменять ОнАктивейт, чтобы добится плавного появления формы

Re: Проблема с OnActivate

Добавлено: 05 янв 2010, 10:40
Duncon
Нужно отрисовать форму, а только потом играться с прозрачностью. Попробуй перевесить на onShow

Re: Проблема с OnActivate

Добавлено: 06 янв 2010, 02:17
dr.Jekill
или на onpaint c флагом

Re: Проблема с OnActivate

Добавлено: 06 янв 2010, 09:20
Хыиуду
Кроме того, можно поставить sleep(1) в цикл, чтобы это происходило чуть медленней.