
| Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
События при создании формы Delphi
|
||
| Философия, технологии, алгоритмы! |
![]() |
|
|
Опции темы |
|
|
#1 |
|
Форумец
Сообщений: 15
Регистрация: 11.02.2003
Возраст: 43
|
Возник следующий вопрос: в дельфях седьмых хочется сделать, чтобы форма появлялась не сразу, а постепенно, как Чеширский Кот
![]() Очевидный порыв использовать alphaBlend (благо W2K есть уже почти везде) наталкивается вот на что - если сажать блендинг на OnCreate - OnPaint, то отрисовывается только форма, а картинки и кнопки на ней появляются уже ПОСЛЕ отработки; попытки принудительно отрисовать картинку в OnPaint тоже ни к чему не привели Можно ли как-нибудь привязаться не к началу, а к концу отрисовки формы - или еще другой какой-нибудь путь существует?..
|
|
|
|
|
#2 |
|
Форумец
Сообщений: 19
Регистрация: 20.02.2005
Возраст: 43
|
Не знаю... А что такое alphaBlend? Первое, что приходит в голову (криво, правда, но гарантированно заработает) - заведи на OnCreate таймер эдак на полсекунды, а как тикнет - форма уже отрисовалась, власть тебе полная... А вообще проблема эта у меня уже была, давно, правда, не помню, как решил. Действительно, неясно, как отловить окончание отрисовки. Посмотрю завтра на работе, ежели получится сделать "прямо" - напишу.
|
|
|
|
|
#4 | |
|
форумец
Сообщений: 1,603
Регистрация: 22.01.2004
Возраст: 26
|
Арсений ну я на BCpp использовал альфаБленд. у меня вот так написано - все работает нормально
Цитата:
ЗЫ мсье, Захаров? |
|
|
|
|
|
#5 |
|
Форумец
Сообщений: 1,986
Регистрация: 27.08.2003
|
Вот - модуль, который заставляет пульсировать форму вместе с картинкой.
------------------------------------ #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; } //--------------------------------------------------------------------------- |
|
|
|
|
#6 |
|
Форумец
Сообщений: 19
Регистрация: 20.02.2005
Возраст: 43
|
Эх, судари... Развращает вас 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 ); Вот это я понимаю, Блендинг... |
|
|
|
|
#7 |
|
Форумец
Сообщений: 15
Регистрация: 11.02.2003
Возраст: 43
|
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; |
|
|