Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];

Вниз

Анимация окна   Найти похожие ветки 

 
Trible   (2007-10-31 05:24) [0]

Как сделать в КОЛ, чтобы при запуске приложения происходил эффект анимации главного окна - прозрачность плавно изменялась от полупрозрачного до непрозрачного?


 
Compiler ©   (2007-10-31 12:43) [1]

Сойдет?

procedure TForm1.KOLFormFormCreate(Sender: PObj);
var
 i:integer;
begin
i:=0;
form.AlphaBlend:=0;
form.CreateWindow;
 while i<>  255 do
 begin
   Form1.form.AlphaBlend := i;
   Applet.ProcessMessages;
  inc(i);
 end;
end;


 
Trible   (2007-10-31 18:06) [2]


> Compiler ©   (31.10.07 12:43) [1]
> Сойдет?

Сойдет, спасибо. Вдогонку: а как обеспечить такую же анимацию при закрытии программы? Пробовал по OnClose для формы:


procedure TForm1.KOLFormClose(Sender: PObj);
var
i:integer;
begin
i:=255;
form.AlphaBlend:=255;
while i <> 0 do
begin
  Form1.form.AlphaBlend := i;
  Applet.ProcessMessages;
 dec(i);
end;
end;


Так вот, при закрытии форма почему-то чернеет на секунду, а потом уже идет анимация (изменение аьфа-бленда). Как побороть?


 
Compiler ©   (2007-11-01 01:25) [3]

Еще хороший способ.
AnimateWindow(form.handle, 2000, AW_BLEND or AW_HIDE);


 
Trible   (2007-11-01 04:58) [4]


> Compiler ©   (01.11.07 01:25) [3]
> Еще хороший способ.AnimateWindow(form.handle, 2000, AW_BLEND
> or AW_HIDE);

Да хотелось бы адаптировать [1], чтоб работало при закрытии формы. Не пойму почему форма чернеет при закрытии.


 
Дмитрий К ©   (2007-11-01 06:38) [5]

А если так:
 i := form.AlphaBlend - 1;
 while i > 0 do
 begin
   form.AlphaBlend := i;
   form.ProcessPaintMessages; // ProcessMessages;
   dec(i);
   {Sleep(10);}
 end;


 
Trible   (2007-11-01 10:51) [6]


> Дмитрий К ©   (01.11.07 06:38) [5]

Ну чернеет форма при закрытии, сами убедитесь ...


 
Compiler ©   (2007-11-01 11:55) [7]


> AnimateWindow(form.handle, 2000, AW_BLEND or AW_HIDE);

Так работает при закрытии!!!


 
Trible   (2007-11-01 12:00) [8]


> Compiler ©   (01.11.07 11:55) [7]
> > AnimateWindow(form.handle, 2000, AW_BLEND or AW_HIDE);
> Так работает при закрытии!!!

При закрытии работает, при открытии AnimateWindow() лажает (форма не перерисовываеццо). Писал AnimateWindow( form.Handle, 2000, AW_BLEND );


 
Compiler ©   (2007-11-01 12:18) [9]

procedure TForm1.KOLFormShow(Sender: PObj);
begin
AnimateWindow( form.Handle, 3000, AW_BLEND or AW_ACTIVATE );
end;


 
homm ©   (2007-11-01 12:21) [10]

> [8] Trible   (01.11.07 12:00)
> Писал AnimateWindow( form.Handle, 2000, AW_BLEND );

А писал form.CreateWindow; ?


 
Trible   (2007-11-01 13:31) [11]


> homm ©   (01.11.07 12:21) [10]
> > [8] Trible   (01.11.07 12:00)> Писал AnimateWindow( form.
> Handle, 2000, AW_BLEND );А писал form.CreateWindow; ?

Вообще, конструкция

procedure TForm1.KOLFormCreate(Sender: PObj);
begin
Form.CreateWindow;
AnimateWindow( Form.Handle, 1000, AW_BLEND );
end;

приводит к тому, что изменение блендинга при запуске не работает (форма прорисовывается мгновенно без блендинга). И вообще, я не уверен: в какой версии Виндовс появилась AnimateWindow() ? В 98 будет работать?

Подскажите, как победить почернение формы в [5], [2].


 
homm ©   (2007-11-01 13:36) [12]

> [11] Trible   (01.11.07 13:31)
> В 98 будет работать?

В 98-й ничего из предложеного не будет работать.
В 98-й можно только скриншот экрана сделать в том месте, где форма должна появится и скриншот формы (учитывая то, что тебе нужно это сделать ДО появления формы — чудо, если тебе это удастся) и медленно его перерисовывать с альфасмешиванием, использую, например функцию AlphaBlend из KOLGRushControls.pas.


 
homm ©   (2007-11-01 13:38) [13]

Общий совет: используй AnimateWindow и забей на 9х, на них сейчас седят только суровые парни, которым рюшечки не нужны.


 
homm ©   (2007-11-01 14:04) [14]

> [4] Trible   (01.11.07 04:58)
> Не пойму почему форма чернеет при закрытии.

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

при использовании AnimateWindow не забудь сделать так, что-бы ее использование не приводило к невозможности запуска твоей проги на 9х. Как это сделать можно помотреть в коде реализации свойства AlphaBlend в самом КОЛ.


 
Compiler ©   (2007-11-03 00:55) [15]

Внедрил в свою прогу такой спецэффект. Как не странно, заработало как требуется, но только форма чернеет при минимизации и максимизации.

procedure TForm1.KOLFormFormCreate(Sender: PObj);
var
 i:integer;
begin
i:=0;
form.AlphaBlend:=i;
form.CreateWindow;
while i<>255 do
 begin
   Form1.form.AlphaBlend := i;
   Applet.ProcessMessages;
  inc(i);
 end;
end;

procedure TForm1.KOLFormClose(Sender: PObj; var Accept: Boolean);
var
 i:integer;
begin
i:=254;
while i<>0 do
 begin
   Form1.form.AlphaBlend := i;
   Applet.ProcessMessages;
  dec(i);
 end;
end;


 
homm ©   (2007-11-03 01:06) [16]

> [15] Compiler ©   (03.11.07 00:55)
> но только форма чернеет при минимизации и максимизации.

А прочитать то, что жо этого здесь я написал — лень?


 
Vladimir Kladov ©   (2007-11-03 06:38) [17]

По простому: чтобы не чернело, уберите с формы все Transparent и DoubleBuffered.


 
homm ©   (2007-11-03 07:42) [18]

> [17] Vladimir Kladov ©   (03.11.07 06:38)

Хм… нет. Я попробовал код из [15] на форме с прозрачностью, он работает. Причем на формах среднего размера все идеально, а на большой форме фотма белеет сразу после появления. Т.е. сначала ничего, потом четверть секунды белый прямоуольник, потом форма с прозрачностью 1/256.

Насчет AnimateWindow функции, может дело в этом?
If the function fails, the return value is zero. The function will fail in the following situations:
………
When trying to animate a child window with AW_BLEND.


 
Vladimir Kladov ©   (2007-11-03 10:19) [19]

Но у меня сработало. Причём после первого изменения альфы я возвращаю прозрачность, но уже ничего не чернеет. См. в зумере все самоисчезающие сообщения вроде того что это первая/последняя картинка в списке, Fit window включено/выключено и т.п. - в варианте с грашем. Если приглядеться, то даже видно, что при первом показе стиль отличается чуть-чуть. Но потом прозрачность меняется только до 254 чтобы перехода уже не было.


 
Trible   (2007-11-09 21:14) [20]


> Vladimir Kladov ©   (03.11.07 10:19) [19]
> Но у меня сработало.

а можно поподробнее? поясните на примере, как вы в зумере сделали прозрачность?


 
homm ©   (2007-11-09 21:23) [21]

> [20] Trible   (09.11.07 21:14)
> а можно поподробнее? поясните на примере, как вы в зумере
> сделали прозрачность?

Включи монитор уже:

> [19] Vladimir Kladov ©   (03.11.07 10:19)
> Но потом прозрачность меняется только до 254 чтобы перехода
> уже не было.


 
arreke ©   (2008-02-13 06:57) [22]

Извиняюсь за глупый вопрос.
KOL и MCK, я так понял дополнительные библиотеки, и предыдущие посты написаны для них.
А возможно ли вышесказанные эффекты применить без использования этих библиотек ?
То есть FormCreate begin ... end; FormClose begin ... end;


 
=BuckLr= ©   (2008-02-13 11:01) [23]

Да. какая разница, всё равно api используется


 
Chandrasecar ©   (2008-02-13 18:46) [24]

Я нашел следующее решение проблемы, и оно на мой взгляд куда проще! Ведь не все имеют библиотеку компонентов KOL. Только прежде в св-вах формы нужно указать следующее: AlphaBlend:=True; AlphaBlendValue:=0. На форму добавить таймер, Interval:=1.

procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
begin
  Form1.AlphaBlend:=True;
  for i:=0 to 255 do
  begin
     Form1.AlphaBlendValue:=i;
  end;
  Timer2.Enabled:=False;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var j:integer;
begin
  for j:=255 downto 0 do
  begin
     Form1.AlphaBlendValue:=j;
  end;
end;


 
Chandrasecar ©   (2008-02-13 18:51) [25]

Да, добавлю к предыдущему, процедура для Timer1 должна быть в самом начале програмного кода, т.е. должна выполняться первой! А значение Interval для Timer1 может быть в принципе любым! Оптимальное, на мой взгляд - 25.


 
arreke ©   (2008-02-13 22:29) [26]


> to Chandrasecar


зачем столько писать, выше Compiler уже писал же,
на FormCreate кидаем AnimateWindow(Form1.Handle, 1000, AW_BLEND or AW_ACTIVATE);
на FormClose кидаем AnimateWindow(Form1.handle, 1000, AW_BLEND or AW_HIDE);
и всё нормуль



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.006 c
15-1239764963
UserInet777
2009-04-15 07:09
2009.06.21
Покритикуйте алгоритм авторизации


2-1241619626
Maksas
2009-05-06 18:20
2009.06.21
Вопрос по Мемо


15-1239864485
Дмитрий С
2009-04-16 10:48
2009.06.21
Куда сохраняется содержимое видеопамяти во время спящего режима?


4-1211293971
Vikindos
2008-05-20 18:32
2009.06.21
Считать название параметра из реестра


4-1211700897
leonidus
2008-05-25 11:34
2009.06.21
Перетаскивание файла на иконку в трее





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