Como dá pra perceber, TODOS fazem herança a tstAny, que contém rotinas comuns.
Código: Selecionar todos
CREATE CLASS TstAny INHERIT WvgWindow
VAR autosize INIT .F.
VAR Border INIT .T.
VAR cancel INIT .F.
VAR cText
VAR default INIT .F.
VAR drawMode INIT WVG_DRAW_NORMAL
VAR preSelect INIT .F.
VAR pointerFocus INIT .F.
VAR Style INIT 0
VAR cImage
VAR nIconBitmap INIT 0
VAR lSetCallback INIT .F.
VAR cFontName
VAR nFontSize
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD destroy()
METHOD handleEvent( nMessage, aNM )
METHOD activate( xParam ) SETGET
METHOD setText()
METHOD SetImage()
METHOD draw( xParam ) SETGET
ENDCLASS
METHOD TstAny:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
RETURN Self
METHOD TstAny:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
LOCAL hOldFont
//DO CASE
//CASE ::nIconBitmap == 1 ; ::style += BS_ICON
//CASE ::nIconBitmap == 2 ; ::style += BS_BITMAP
//ENDCASE
::wvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::oParent:AddChild( Self )
::createControl()
IF ::lSetCallback
::SetWindowProcCallback() /* Let parent take control of it */
ENDIF
IF ::cFontName != NIL
hOldFont := ::SendMessage( WIN_WM_GETFONT )
::SendMessage( WIN_WM_SETFONT, wvt_CreateFont( ::cFontName, ::nFontSize ), 0 )
wvg_DeleteObject( hOldFont )
ENDIF
::SetImage()
::SetText()
//IF ::IsCrtParent()
//hOldFont := ::oParent:SendMessage( WIN_WM_GETFONT )
//::SendMessage( WIN_WM_SETFONT, hOldFont, 0 )
//ENDIF
IF ::visible
::show()
ENDIF
::setPosAndSize()
RETURN Self
METHOD TstAny:handleEvent( nMessage, aNM )
DO CASE
CASE nMessage == HB_GTE_RESIZED
IF ::isParentCrt()
::rePosition()
ENDIF
IF ::ClassName == "SysMonthCal32"
::InvalidateRect()
ELSE
::sendMessage( WIN_WM_SIZE, 0, 0 )
IF HB_ISEVALITEM( ::sl_resize )
Eval( ::sl_resize, , , Self )
ENDIF
ENDIF
//IF ::WControlName $ "CMDBUTTON"
// ::Repaint()
//ENDIF
CASE nMessage == HB_GTE_COMMAND
IF aNM[ 1 ] == BN_CLICKED
IF HB_ISEVALITEM( ::sl_lbClick )
IF ::isParentCrt()
::oParent:setFocus()
ENDIF
Eval( ::sl_lbClick, , , Self )
IF ::pointerFocus
::setFocus()
ENDIF
ENDIF
RETURN EVENT_HANDLED
ENDIF
CASE nMessage == HB_GTE_NOTIFY
CASE nMessage == HB_GTE_CTLCOLOR
IF HB_ISNUMERIC( ::clr_FG )
wapi_SetTextColor( aNM[ 1 ], ::clr_FG )
ENDIF
IF ! Empty( ::hBrushBG )
wapi_SetBkMode( aNM[ 1 ], WIN_TRANSPARENT )
RETURN ::hBrushBG
ENDIF
CASE ::lSetCallback .AND. nMessage == HB_GTE_ANY
IF aNM[ 1 ] == WIN_WM_LBUTTONUP
IF HB_ISEVALITEM( ::sl_lbClick )
IF ::isParentCrt()
::oParent:setFocus()
ENDIF
Eval( ::sl_lbClick, , , Self )
ENDIF
ENDIF
ENDCASE
RETURN EVENT_UNHANDLED
METHOD PROCEDURE TstAny:destroy()
LOCAL hOldFont
IF ::cFontName != NIL
hOldFont := ::SendMessage( WIN_WM_GETFONT )
::wvgWindow:destroy()
::wvgWindow:destroy()
wvg_DeleteObject( hOldFont )
ENDIF
RETURN
METHOD TstAny:configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
RETURN Self
METHOD TstAny:SetText()
IF HB_ISCHAR( ::cText )
::sendMessage( WIN_WM_SETTEXT, 0, ::cText )
ENDIF
RETURN NIL
METHOD TstAny:SetImage()
IF ::cImage != NIL .AND. ( ::nIconBitmap == WIN_IMAGE_ICON .OR. ::nIconBitmap == WIN_IMAGE_BITMAP )
// BM_SETIMAGE on button, STM_SETIMAGE em outros
::sendMessage( STM_SETIMAGE, ::nIconBitmap, wvg_LoadImage( ::cImage, 1, ::nIconBitmap ) )
ENDIF
RETURN NIL
METHOD TstAny:draw( xParam )
IF HB_ISEVALITEM( xParam ) .OR. xParam == NIL
::sl_paint := xParam
ENDIF
RETURN Self
METHOD TstAny:activate( xParam )
IF HB_ISEVALITEM( xParam ) .OR. xParam == NIL
::sl_lbClick := xParam
ENDIF
RETURN Self