Qué embidia de diálogos tranparentes con los 32 bits. Menos mal que con 16 bits tambien se puede: Ahí va una clase que ayyuda
#Include "FiveWin.ch"
*#Include "MisFunc.ch"
#define GWL_STYLE -16
CLASS TDIAG OF TDIALOG
CLASSDATA lRegistered AS LOGICAL
DATA lSomb AS LOGICAL INIT .F.
DATA hFond,hPen,nDif
METHOD Activate( bClicked, bMoved, bPainted, lCentered, bValid, lModal, bInit, bRClicked, bWhen, nClrShadow )
METHOD Initiate( hWndFocus, hWnd )
METHOD Paint()
METHOD StartPaint()
METHOD PintSombra()
METHOD Destroy()
ENDCLASS
METHOD Activate( bClicked, bMoved, bPainted, lCentered, bValid, lModal, bInit, bRClicked, bWhen, nClrShadow ) CLASS TDIAG
IF nClrShadow # NIL
::lSomb := .T.
::hPen := CreatePen( 0,1,nClrShadow )
ENDIF
DEFINE BRUSH ::oBrush NULL
RETURN Super:Activate( bClicked, bMoved, bPainted, lCentered, bValid, lModal, bInit, bRClicked, bWhen )
METHOD Initiate( hWndFocus, hWnd ) CLASS TDIAG
LOCAL lFocus := Super:Initiate( hWndFocus, hWnd )
*
::nDif := IF(lAnd(GetWindowLong(::hWnd,GWL_STYLE),WS_BORDER),1,0)
::bStart := { || ::StartPaint() }
RETURN lFocus
METHOD Paint() CLASS TDIAG
DrawBitmap( ::hDc, ::hFond, -::nDif, -::nDif )
IF ::bPainted # NIL
EVAL(::bPainted,::hDc)
ENDIF
RETURN NIL
*
METHOD StartPaint() CLASS TDIAG
::GetDc()
::PintSombra(::hDc)
::ReleaseDc()
IF ::bPainted # NIL
ENDIF
::hFond := WndBitmap(::hWnd)
RETURN NIL
*
METHOD PintSombra(hDc) CLASS TDIAG
LOCAL hOldP := SelectObject( hDc,::hPen )
LOCAL nCont1,nCont2 := 0
LOCAL nDesde := 2
LOCAL nHasta := ::nWidth+::nHeight-2
*
FOR nCont1 = nDesde TO nHasta STEP 2
nCont2 := nCont1 - ::nHeight
MoveTo(hDc,nCont1,0)
LineTo(hDc,nCont2,::nHeight)
MoveTo(hDc,nCont2,0)
LineTo(hDc,nCont1,::nHeight)
NEXT
SelectObject( hDc,hOldP )
RETURN NIL
METHOD Destroy() CLASS TDIAG
DeleteObject(::hFond)
DeleteObject(::hPen)
RETURN NIL
Por favor, si alguien la perfecciona, le agradecería que me mandara el nuevo código a mi e-mail (ramosframit@ono.com)
Y EL FONDO NO SE BORRA CUANDO SE REFRESCA. El único inconveniente es que sólo se puede emplear con diálogos estáticos.
[img][img]http://img72.imageshack.us/img72/5411/ejemplo10dn.jpg[/img][/img]
En este ejemplo, lo uso para la soombra del diaologo de confirmacion
[img][img]http://img72.imageshack.us/img72/2374/ejemplo20lx.jpg[/img][/img]
En este otro, para la sombra del diálogo naranja, y para el menu que hay por detrástranlucido.
16 bits tranparentes
16 bits tranparentes
Nos Gusta Programar
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
Muchas gracias Manuel, pero no son folders, son BITMAPS, pero da el pego. Los dialogo son NOWAIT sobre un WINDOW normal. Va muy bien; parecido al entorno MDI, pero, en ciertos aspectos, más controlable, si nunca se va a mostrar.
Hay dos BITMAPS para cada solapa, la activa y las otras, inactivas.
Hay dos BITMAPS para cada solapa, la activa y las otras, inactivas.
Nos Gusta Programar