Форум: "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