Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
События при создании формы Delphi |
Философия, технологии, алгоритмы! |
|
Опции темы |
05.03.2005, 01:09 | #1 |
Форумец
Сообщений: 15
Регистрация: 11.02.2003
Возраст: 41
Не в сети |
События при создании формы Delphi
Возник следующий вопрос: в дельфях седьмых хочется сделать, чтобы форма появлялась не сразу, а постепенно, как Чеширский Кот
Очевидный порыв использовать alphaBlend (благо W2K есть уже почти везде) наталкивается вот на что - если сажать блендинг на OnCreate - OnPaint, то отрисовывается только форма, а картинки и кнопки на ней появляются уже ПОСЛЕ отработки; попытки принудительно отрисовать картинку в OnPaint тоже ни к чему не привели Можно ли как-нибудь привязаться не к началу, а к концу отрисовки формы - или еще другой какой-нибудь путь существует?.. |
09.03.2005, 23:11 | #2 |
Форумец
Сообщений: 19
Регистрация: 20.02.2005
Возраст: 42
Не в сети |
Не знаю... А что такое alphaBlend? Первое, что приходит в голову (криво, правда, но гарантированно заработает) - заведи на OnCreate таймер эдак на полсекунды, а как тикнет - форма уже отрисовалась, власть тебе полная... А вообще проблема эта у меня уже была, давно, правда, не помню, как решил. Действительно, неясно, как отловить окончание отрисовки. Посмотрю завтра на работе, ежели получится сделать "прямо" - напишу.
|
10.03.2005, 08:52 | #4 | |
форумец
Сообщений: 1,604
Регистрация: 22.01.2004
Возраст: 24
Не в сети |
Арсений ну я на BCpp использовал альфаБленд. у меня вот так написано - все работает нормально
Цитата:
ЗЫ мсье, Захаров? |
|
10.03.2005, 09:50 | #5 |
Форумец
Сообщений: 2,045
Регистрация: 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; } //--------------------------------------------------------------------------- |
10.03.2005, 22:34 | #6 |
Форумец
Сообщений: 19
Регистрация: 20.02.2005
Возраст: 42
Не в сети |
Эх, судари... Развращает вас 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; |