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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2012, 09:27   #11
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Да зачем использовать таймер? Есть же AnimateWindow.
FaTaL вне форума Ответить с цитированием
Старый 25.10.2012, 10:56   #12
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Если кому интеесно, как это зделать в С++ Builder, вот код:

Код:
// Плавное открывание - закрывание формы приложения

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
SetWindowLong(Form1->Handle,GWL_EXSTYLE,GetWindowLong(Form1->Handle,GWL_EXSTYLE) & ~WS_EX_LAYERED);
SetWindowLong(Form1->Handle,GWL_EXSTYLE,GetWindowLong(Form1->Handle,GWL_EXSTYLE) | WS_EX_LAYERED);
}
//---------------------------------------------------------------------------
// Открываем окно
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Timer1->Tag = 0;
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
// Закрываем окно
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if(Form1->Tag)
{
  CanClose = false;
  Timer1->Enabled = true;
}
}
//---------------------------------------------------------------------------
// Таймер манипулиования с прозрачностью формы
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(Form1->Tag)
{
  if(Timer1->Tag > 0)
  {
    SetLayeredWindowAttributes(Form1->Handle, 0, Timer1->Tag, LWA_ALPHA);
    Timer1->Tag-=5;
  }
  else
  {
    Form1->Tag = 0;
    Timer1->Enabled = false;
    Form1->Close();
  }
}
else
{
  if(Timer1->Tag < 255)
  {
    SetLayeredWindowAttributes(Form1->Handle, 0, Timer1->Tag, LWA_ALPHA);
    Timer1->Tag+=5;
  }
  else
  {
    Form1->Tag = 1;
    Timer1->Enabled = false;
  }
}
}
//---------------------------------------------------------------------------
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 25.10.2012 в 12:15.
Smitt&Wesson вне форума Ответить с цитированием
Старый 25.10.2012, 11:47   #13
BukTop2009
Пользователь
 
Регистрация: 16.06.2011
Сообщений: 55
По умолчанию

Пока ещё с делфи не определились а ты про С++ пишешь)

Misher уже совсем близок к цели! Ты по ходу почти решил задачу, скажи как сделать чтобы я не тыкал кнопкой чтоб закрывалась форма. А чтоб автоматом открылась допустим сек 1-2 поторчала и сама закрылась, далее уже другие формы.
No smoking!

Последний раз редактировалось BukTop2009; 25.10.2012 в 11:53.
BukTop2009 вне форума Ответить с цитированием
Старый 25.10.2012, 11:52   #14
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Self.lose
полный лосе ... вам уже все тут дали рассказали, осталось дело за малым.
eval вне форума Ответить с цитированием
Старый 25.10.2012, 20:54   #15
BukTop2009
Пользователь
 
Регистрация: 16.06.2011
Сообщений: 55
По умолчанию

Наверняка... Спасибо.
No smoking!
BukTop2009 вне форума Ответить с цитированием
Старый 26.10.2012, 00:48   #16
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

чтобы форма появлялась/исчезала только один раз, а не в цикле,
думаю вполне логично, что нужно таймер то все-таки остановить после появления/исчезания формы.

но здесь есть еще одна не очень приятная проблема...
если форма достаточно растянута, на весь экран, например,
то при переключении Form1.AlphaBlend:=true; форма мигнет черным экраном...
именно при включении прозрачности, причем не важно с каким значением,
если Form1.AlphaBlendValue = 255 - все равно мигнет...

причем чем больше форма - тем заметнее мигание.
кто-нибудь знает как это исправить?
xrob вне форума Ответить с цитированием
Старый 28.10.2012, 08:47   #17
antoxamad
Пользователь
 
Регистрация: 04.02.2012
Сообщений: 32
По умолчанию

кода на три строчки:

Код:
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;
antoxamad вне форума Ответить с цитированием
Старый 21.03.2013, 16:46   #18
RingK
Новичок
Джуниор
 
Регистрация: 26.01.2012
Сообщений: 1
По умолчанию

AnimateWindow все же лучше.

Последний раз редактировалось RingK; 22.03.2013 в 11:00.
RingK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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