Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2012, 22:54   #1
BukTop2009
Пользователь
 
Регистрация: 16.06.2011
Сообщений: 55
По умолчанию Плавные появление и исчезновение формы

Уверен первые Ваши мысли закрыть тему, из-за того что есть схожие. Однако никто не растолковывал по-человечески как осуществляется плавное исчезновение. Взял алгоритм плавного появления, для тех кому понадобиться:

Цитата:
1)Свойство формы AlphaBlend:=True и его значение Value:=0

2)2 раза клик по Ttimer (Предварительно установив интервал в 10 например)

3)
Logo.AlphaBlendValue:= Logo.AlphaBlendValue+5;
if Logo.AlphaBlendValue=255 then timer1.Destroy;
Но кто нибудь скажет как сделать исчезновение такое же плавное? Я пробывал с Ttimer'ом 2-ым не получилось то ли из за нехватки соображения, то-ли неверный подход к реализации. Подскажите пожалуйста гуру программирования.
No smoking!
BukTop2009 вне форума Ответить с цитированием
Старый 24.10.2012, 23:12   #2
misher
Участник клуба
 
Аватар для misher
 
Регистрация: 26.05.2010
Сообщений: 1,648
По умолчанию

На форму добавляем Timer интервал 20.

Далее пишем
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.AlphaBlendValue := Form1.AlphaBlendValue - 5;
if Form1.AlphaBlendValue=0 then Form1.Close;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Timer1.Enabled=false then
   begin
   CanClose := false;
   Timer1.Enabled := true;
   exit;
   end;
CanClose := true;
end;
This world will never be What I expected (c)
misher вне форума Ответить с цитированием
Старый 24.10.2012, 23:33   #3
BukTop2009
Пользователь
 
Регистрация: 16.06.2011
Сообщений: 55
По умолчанию

Цитата:
Сообщение от misher Посмотреть сообщение
На форму добавляем Timer интервал 20.

Далее пишем
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.AlphaBlendValue := Form1.AlphaBlendValue - 5;
if Form1.AlphaBlendValue=0 then Form1.Close;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Timer1.Enabled=false then
   begin
   CanClose := false;
   Timer1.Enabled := true;
   exit;
   end;
CanClose := true;
end;
Вставляю 2 таймер прописываю код и вписываю ваше событие, форма вообще не появляется.
No smoking!
BukTop2009 вне форума Ответить с цитированием
Старый 24.10.2012, 23:51   #4
misher
Участник клуба
 
Аватар для misher
 
Регистрация: 26.05.2010
Сообщений: 1,648
По умолчанию

Ну тогда можно так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin 
AnimateWindow(Handle, 1000, AW_BLEND)
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
AnimateWindow(Handle, 1000, AW_HIDE or AW_BLEND)
end;

end.
1000 - интервал таймера.
This world will never be What I expected (c)

Последний раз редактировалось misher; 25.10.2012 в 00:07.
misher вне форума Ответить с цитированием
Старый 25.10.2012, 00:19   #5
BukTop2009
Пользователь
 
Регистрация: 16.06.2011
Сообщений: 55
По умолчанию

Цитата:
Сообщение от misher Посмотреть сообщение
Ну тогда можно так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin 
AnimateWindow(Handle, 1000, AW_BLEND)
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
AnimateWindow(Handle, 1000, AW_HIDE or AW_BLEND)
end;

end.
1000 - интервал таймера.
Нет, почему-то даже не анимируется, но Вы уже анимацию хотите применить. А я просил обычное плавное появление и исчезновение.
По ходу задачка даже для Вас не простой оказалась.
No smoking!
BukTop2009 вне форума Ответить с цитированием
Старый 25.10.2012, 00:30   #6
BukTop2009
Пользователь
 
Регистрация: 16.06.2011
Сообщений: 55
По умолчанию

Мой примитивный вариант:

Цитата:
procedure TLogo.Timer1Timer(Sender: TObject);
var
s,s1:integer;
begin
Logo.AlphaBlendValue:= Logo.AlphaBlendValue+5;
if Logo.AlphaBlendValue=255 then begin
s:=255;
s1:=s;
Logo.AlphaBlendValue:= s1-1;
if Logo.AlphaBlendValue=0 then begin
Logo.Close;
timer1.Destroy;
Почему-то он циклом идёт, потух, появился, потух, появился... Как бы это исправить?
No smoking!

Последний раз редактировалось BukTop2009; 25.10.2012 в 00:32.
BukTop2009 вне форума Ответить с цитированием
Старый 25.10.2012, 00:56   #7
misher
Участник клуба
 
Аватар для misher
 
Регистрация: 26.05.2010
Сообщений: 1,648
По умолчанию

Вот, все работает...

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    


    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  Value: Byte = 0;
implementation

{$R *.dfm}



procedure TForm1.FormCreate(Sender: TObject);

begin
  AlphaBlend := True;
  AlphaBlendValue := Value;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
Value:=Value + 1;
  if Value <= 254 then
    AlphaBlendValue := Value
  else
  begin
    Value := 0;
    Timer1.Enabled := False;
  end;
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: integer;
begin

 AlphaBlend:=true;
AlphaBlendValue:=255;
 for i:=255 downto 0 do
  begin
   AlphaBlendValue:=i;
   sleep(10);
  end;
  AlphaBlend:=false;
end;

end.
This world will never be What I expected (c)
misher вне форума Ответить с цитированием
Старый 25.10.2012, 01:01   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
sleep(10);
не кошерно
eval вне форума Ответить с цитированием
Старый 25.10.2012, 01:06   #9
misher
Участник клуба
 
Аватар для misher
 
Регистрация: 26.05.2010
Сообщений: 1,648
По умолчанию

Цитата:
не кошерно
по другому не знаю как
This world will never be What I expected (c)
misher вне форума Ответить с цитированием
Старый 25.10.2012, 09:18   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: integer;
begin
  if not timer1.Enabeled then
    time1.enabled:=true;
    AlphaBlend:=true;
    AlphaBlendValue:=255;
  end
  else begin
    AlphaBlendValue:=AlphaBlendValue-1;
  end;
  
  if AlphaBlendValue>0 then action:=caNone //отказ от закрытия
  else action:=caClose; //закрываем
end;
Не проверял но должно работать.

Ах да в таймере надо снова пытаться закрыть форму, причем возможно придется посылать себе самому сообщение.
self.Close| SendMessage | PostMessage

или же так без "постоянных" забот о закрытии
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: integer;
begin
  if alphablend>0 then action:=caNone; //если форма видна отказ от закрытия
  
  if not time1.Enabled then begin 
     alhablendValue:=255;
     timer1.enabled; //запустить таймер погашения
  end;
end;

procedure TForm1.Time1Time(Sender: TObject);
begin
  alphabledvalue:=alphablendvalue-1;
  if alphablendvalue<1{=0} then begin // форма погашена
     self.time1.Enabled:=false; // отключаем таймер
     self.close; // закрываем форму
  end;
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 25.10.2012 в 09:38.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ windows forms появление и исчезновение картинки. GoodAmigo Помощь студентам 0 08.06.2012 15:00
Появление формы (slide down) Che Guevara JavaScript, Ajax 6 08.12.2011 17:16
плавное появление/исчезновение объекта TImage Хамяг Общие вопросы Delphi 2 04.12.2011 01:14
появление формы quarty Общие вопросы Delphi 6 20.01.2011 22:42
Появление формы. Kukkk Общие вопросы Delphi 17 13.09.2007 20:23