Возник следующий вопрос: в дельфях седьмых хочется сделать, чтобы форма появлялась не сразу, а постепенно, как Чеширский Кот
Очевидный порыв использовать alphaBlend (благо W2K есть уже почти везде) наталкивается вот на что - если сажать блендинг на OnCreate - OnPaint, то отрисовывается только форма, а картинки и кнопки на ней появляются уже ПОСЛЕ отработки; попытки принудительно отрисовать картинку в OnPaint тоже ни к чему не привели Можно ли как-нибудь привязаться не к началу, а к концу отрисовки формы - или еще другой какой-нибудь путь существует?..
[Ответ]
Necromant 23:11 09.03.2005
Не знаю... А что такое alphaBlend? Первое, что приходит в голову (криво, правда, но гарантированно заработает) - заведи на OnCreate таймер эдак на полсекунды, а как тикнет - форма уже отрисовалась, власть тебе полная... А вообще проблема эта у меня уже была, давно, правда, не помню, как решил. Действительно, неясно, как отловить окончание отрисовки. Посмотрю завтра на работе, ежели получится сделать "прямо" - напишу.
[Ответ]
Necromant 23:14 09.03.2005
А про постепенное появление - можно поиграться с CreateRgn, CombineRgn и SetWindowRgn. Можно сделать, чтобы форма появлялась из разезжающегося круга, например...
[Ответ]
DimmaN 08:52 10.03.2005
Арсений ну я на BCpp использовал альфаБленд. у меня вот так написано - все работает нормально
Сообщение от :
//---------------------------------------------------------------------------
Эх, судари... Развращает вас 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
);
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;
[Ответ]