Как накладывать скины на формы?
Говорят, есть какая-то утилита в Cbuilder'e.
Спасибо.
про утилиту ничего не знаю... на каком-то сайте видел компонент, который этим занимается... то есть ставишь его на форму и грузишь в него картинку, жмешь батон и компонент делает форму с очертаниями картинки... но это можно ручками сделать... посмотри хелп по апишым функциям SetWindowRgn и CreatePolygonRgn
> так что же это за компонента таная?
кто знает?
> так что же это за компонента таная?
кто знает?
Где-то у меня такой компонент валялся, но я им сам никогда не пользовался, надобности не было.
Если что, то могу выслать его тебе, только будет нужен твой E-Mail. ;-)
Как накладывать скины на формы?
Говорят, есть какая-то утилита в Cbuilder'e.
Спасибо.
Код из моего сплеш-скрина.
Кладешь на форму TImage. Загружаешь в него картинку. Белый цвет считается прозрачным.
Пробовал обойтись без TImage и передавать вместо Image1->Picture->Bitmap битмап, загруженный из ресурсов проги, но почему-то не вышло.
HRGN __fastcall TfrmSplash::CreateRgn(Graphics::TBitmap *Bmp, LPPOINT pPoint)
{
HBITMAP hBmp = Bmp->Handle;
if(!hBmp) return NULL;
BITMAP bi;
BYTE bpp;
DWORD e, f, t;
bool b = false;
HRGN Rgn, ResRgn = CreateRectRgn(0, 0, 0, 0);
GetObject(hBmp, sizeof(BITMAP), &bi);
bpp = bi.bmBitsPixel >> 3;
BYTE *pBits = new BYTE[bi.bmWidth * bi.bmHeight * bpp];
GetBitmapBits(hBmp, bi.bmWidth * bi.bmHeight * bpp, pBits);
if(pPoint == NULL || pPoint->x >= bi.bmWidth || pPoint->y >= bi.bmHeight)
e = *(DWORD*)pBits;
else
e = *(DWORD*)(pBits + (pPoint->y * bi.bmWidth + pPoint->x) * bpp );
e <<= 32 - bi.bmBitsPixel;
for(int i = 0; i<bi.bmHeight; i++)
for(int j = 0; j<bi.bmWidth; j++)
{
t = *(DWORD*)(pBits + (i * bi.bmWidth + j) * bpp) << (32 - bi.bmBitsPixel);
if(t != e)
{
if(!b)
{
f = j;
b = true;
}
else if(j == (bi.bmWidth - 1))
{
Rgn = CreateRectRgn(f, i, j, i + 1);
CombineRgn(ResRgn, ResRgn, Rgn, RGN_OR);
b = false;
}
}
else if(b)
{
Rgn = CreateRectRgn(f, i, j, i + 1);
CombineRgn(ResRgn, ResRgn, Rgn, RGN_OR);
b = false;
}
}
delete pBits;
return ResRgn;
}
//---------------------------------------------------------------------------
void __fastcall TfrmSplash::FormShow(TObject *Sender)
{
SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE);
SetWindowRgn(Handle, CreateRgn(Image1->Picture->Bitmap, NULL), true);
}
//---------------------------------------------------------------------------
Где-то у меня такой компонент валялся, но я им сам никогда не пользовался, надобности не было.
Если что, то могу выслать его тебе, только будет нужен твой E-Mail. ;-)
> bercut - вот тебе мыло : [email]nikev@ukr.net[/email]
Буду ждать,
Пака.