Старый 05.03.2005, 01:09   #1   
Форумец
 
Аватар для Арсений
 
Сообщений: 15
Регистрация: 11.02.2003
Возраст: 41

Арсений вне форума Не в сети
Question События при создании формы Delphi

Возник следующий вопрос: в дельфях седьмых хочется сделать, чтобы форма появлялась не сразу, а постепенно, как Чеширский Кот
Очевидный порыв использовать alphaBlend (благо W2K есть уже почти везде) наталкивается вот на что - если сажать блендинг на OnCreate - OnPaint, то отрисовывается только форма, а картинки и кнопки на ней появляются уже ПОСЛЕ отработки; попытки принудительно отрисовать картинку в OnPaint тоже ни к чему не привели Можно ли как-нибудь привязаться не к началу, а к концу отрисовки формы - или еще другой какой-нибудь путь существует?..
  Ответить с цитированием
Старый 09.03.2005, 23:11   #2   
Форумец
 
Аватар для Necromant
 
Сообщений: 19
Регистрация: 20.02.2005
Возраст: 42

Necromant вне форума Не в сети
Не знаю... А что такое alphaBlend? Первое, что приходит в голову (криво, правда, но гарантированно заработает) - заведи на OnCreate таймер эдак на полсекунды, а как тикнет - форма уже отрисовалась, власть тебе полная... А вообще проблема эта у меня уже была, давно, правда, не помню, как решил. Действительно, неясно, как отловить окончание отрисовки. Посмотрю завтра на работе, ежели получится сделать "прямо" - напишу.
  Ответить с цитированием
Старый 09.03.2005, 23:14   #3   
Форумец
 
Аватар для Necromant
 
Сообщений: 19
Регистрация: 20.02.2005
Возраст: 42

Necromant вне форума Не в сети
А про постепенное появление - можно поиграться с CreateRgn, CombineRgn и SetWindowRgn. Можно сделать, чтобы форма появлялась из разезжающегося круга, например...
  Ответить с цитированием
Старый 10.03.2005, 08:52   #4   
форумец
 
Аватар для DimmaN
 
Сообщений: 1,604
Регистрация: 22.01.2004
Возраст: 24

DimmaN вне форума Не в сети
Арсений ну я на BCpp использовал альфаБленд. у меня вот так написано - все работает нормально
Цитата:
//---------------------------------------------------------------------------

void __fastcall Tform_main::ApplicationEvents1Deactivate(TObject *Sender)
{
for (int sch = 255; sch >= 150; sch--)
{
form_main->AlphaBlendValue = sch;
};
}
//---------------------------------------------------------------------------

void __fastcall Tform_main::ApplicationEvents1Activate(TObject *Sender)
{
form_main->AlphaBlendValue = 255;
}
//---------------------------------------------------------------------------
Тока надо это в паскакаль переделать

ЗЫ мсье, Захаров?
  Ответить с цитированием
Старый 10.03.2005, 09:50   #5   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 2,045
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
Вот - модуль, который заставляет пульсировать форму вместе с картинкой.
------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "About.h"
#include "Main.h"
//---------------------------------------------------------------------
#pragma resource "*.dfm"
TAboutBox *AboutBox;
//---------------------------------------------------------------------
__fastcall TAboutBox::TAboutBox(TComponent *Owner)
: TForm(Owner)
{
AnsiString var = Label4->Caption +
MainForm->getVersionInfo(Application->ExeName);
Label4->Caption = var;
grad = 1;
Timer1->Enabled = true;

}
//---------------------------------------------------------------------
void __fastcall TAboutBox::Timer1Timer(TObject *Sender)
{
AlphaBlendValue += grad;
if (AlphaBlendValue > 250)
grad = -1;
if (AlphaBlendValue < 20)
grad = 1;
Update();
}
//---------------------------------------------------------------------------

void __fastcall TAboutBox::FormClose(TObject *Sender, TCloseAction &Action)
{
Timer1->Enabled = false;

}
//---------------------------------------------------------------------------
  Ответить с цитированием
Старый 10.03.2005, 22:34   #6   
Форумец
 
Аватар для Necromant
 
Сообщений: 19
Регистрация: 20.02.2005
Возраст: 42

Necromant вне форума Не в сети
Эх, судари... Развращает вас Borland, AlphaBlendValue юзаете какие-то непонятные... Api надо пользовать, а именно:

BOOL AlphaBlend(
HDC hdcDest, // handle to destination DC
int nXOriginDest, // x-coord of upper-left corner
int nYOriginDest, // y-coord of upper-left corner
int nWidthDest, // destination width
int nHeightDest, // destination height
HDC hdcSrc, // handle to source DC
int nXOriginSrc, // x-coord of upper-left corner
int nYOriginSrc, // y-coord of upper-left corner
int nWidthSrc, // source width
int nHeightSrc, // source height
BLENDFUNCTION blendFunction // alpha-blending function
);

Вот это я понимаю, Блендинг...
  Ответить с цитированием
Старый 11.03.2005, 00:19   #7   
Форумец
 
Аватар для Арсений
 
Сообщений: 15
Регистрация: 11.02.2003
Возраст: 41

Арсений вне форума Не в сети
To DimmaN Он самый...

To Necromant Хм, забавно... Попробую.

To All
Пока пользую такой вот интересный предложенный вариант с API:

procedure TSplashWindow.FormClose(Sender: TObject; var Action: TCloseAction);
var i:integer;
begin
ShowWindow(self.Handle,sw_show);
for i := 0 to 255 do
begin
Application.ProcessMessages;
self.AlphaBlendValue:=i;
end;
end;
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind