Programación General > C++ Builder
Como Crear Ventana Especial
_Viktor:
Pensandolo bien publico el ejemplo aca tambien, para que quede a disposicion del resto de los usuarios del foro.
Saludos ;)
© Jonathan ©:
Gracias _Viktor, muy amable de tu parte, probare el ejemplo, intentare realizarlo con builder 1, ya que no dispongo de builder 6, ahh, dime... donde podria conseguir yo el builder 6???... Gracias por todo y saludos!!! :hola:
_Viktor:
Aqui esta un version de la misma funcion BitmapToRgn que funciona en BCB1, espero te sirva.
--- Código: Text --- //---------------------------------------------------------------------------------void BitmapToRgn(TForm *form, TImage *img){ form->BorderStyle = bsNone; Graphics::TBitmap *bmp = dynamic_cast< Graphics::TBitmap* >( img->Picture->Bitmap ); form->SetBounds( form->Left, form->Top, bmp->Width, bmp->Height ); img->SetBounds( 0, 0, bmp->Width, bmp->Height ); form->Brush->Bitmap = bmp; int tamanyoImagen = bmp->Width * bmp->Height * 4; std::auto_ptr< BITMAPINFO > lpbmi( new BITMAPINFO ); std::auto_ptr< BYTE > bits( new BYTE[tamanyoImagen] ); ZeroMemory( lpbmi.get(), sizeof(BITMAPINFO) ); lpbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); lpbmi->bmiHeader.biWidth = bmp->Width; lpbmi->bmiHeader.biHeight = bmp->Height; lpbmi->bmiHeader.biPlanes = 1; lpbmi->bmiHeader.biBitCount = 32; lpbmi->bmiHeader.biCompression = BI_RGB; lpbmi->bmiHeader.biSizeImage = tamanyoImagen; GetDIBits( bmp->Canvas->Handle, bmp->Handle, 0, bmp->Height, bits.get(), lpbmi.get(), DIB_RGB_COLORS ); DWORD colorTransparente = reinterpret_cast<DWORD*> ( bits.get() )[ bmp->Width * (bmp->Height-1) ]; HRGN rgn = CreateRectRgn( 0, 0, form->Width, form->Height ); HRGN rgnTemp = CreateRectRgn( 0, 0, form->Width, form->Height ); CombineRgn( rgn, rgn, rgnTemp, RGN_DIFF ); DeleteObject( rgnTemp ); for (int y=0; y < bmp->Height; ++y) { DWORD *pixel = &reinterpret_cast<DWORD*> ( bits.get() )[ bmp->Width * (bmp->Height - 1 - y) ]; int ancho = 0; for (int x=0; x <= bmp->Width; ++x) { if ( x != bmp->Width && pixel[x] != colorTransparente ) ancho++; else if ( ancho > 0 ) { rgnTemp = CreateRectRgn( x - ancho, y, x, y + 1 ); CombineRgn( rgn, rgn, rgnTemp, RGN_OR ); DeleteObject( rgnTemp ); ancho = 0; } } } SetWindowRgn( form->Handle, rgn, true ); DeleteObject( rgn );}//---------------------------------------------------------------------------
Saludos! y no te preocupes, que si no nos ayudamos entre programadores , ¿quien no ayuda ? ;)
Saludos!
© Jonathan ©:
Un millon de gracias!!!, ahora si puedo hacerlo con builder 1, jejeje, pense que me hiba a ser imposible, pero veo que no, _Viktor, te agradesco nuevamente toda la ayuda que me has brindado y para cualquier cosa que necesites, puedes contar conmigo. Saludos y mas gracias!!! :hola:
Navegación
[*] Página Anterior
Ir a la versión completa