home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4611 / fw16d.ins / SOURCE / CLASSES / ICON.PRG < prev    next >
Text File  |  1994-06-12  |  3KB  |  129 lines

  1. #include "FiveWin.ch"
  2. #include "Constant.ch"
  3.  
  4. #define IDI_HAND   32513
  5.  
  6. static lRegistered := .f.
  7.  
  8. //----------------------------------------------------------------------------//
  9.  
  10. CLASS TIcon FROM TControl
  11.  
  12.    DATA   cIcoFile, cResName
  13.    DATA   hIcon
  14.  
  15.    METHOD New( nRow, nCol, cResName, cIcoFile, lBorder, bClick,;
  16.                oWnd, lUpdate ) CONSTRUCTOR
  17.  
  18.    METHOD ReDefine() VIRTUAL
  19.  
  20.    METHOD HandleEvent( nMsg, nWParam, nLParam )
  21.  
  22.    METHOD Paint() INLINE DrawIcon( ::hDC, 0, 0, ::hIcon )
  23.  
  24.    METHOD Release() INLINE DeleteObject( ::hIcon ), Super:Release()
  25.  
  26.    METHOD SetName( cNewName )
  27.  
  28.    METHOD LButtonDown( nRow, nCol, nKeyFlags )
  29.  
  30. ENDCLASS
  31.  
  32. //----------------------------------------------------------------------------//
  33.  
  34. METHOD New( nRow, nCol, cResName, cIcoFile, lBorder, bClick, oWnd,;
  35.             lUpdate ) CLASS TIcon
  36.  
  37.    DEFAULT nRow := 0, nCol := 0, cResName := "",;
  38.            cIcoFile := "", lBorder := .f., lUpdate := .f.
  39.  
  40.    ::nTop      = nRow * ICO_CHARPIX_H // 14
  41.    ::nLeft     = nCol * ICO_CHARPIX_W // 8
  42.    ::nBottom   = ::nTop  + 32
  43.    ::nRight    = ::nLeft + 32
  44.    ::oWnd      = oWnd
  45.    ::nStyle    = nOR( WS_CHILD, WS_VISIBLE, If( lBorder, WS_BORDER, 0 ) )
  46.    ::nId       = ::GetNewId()
  47.    ::cIcoFile  = cIcoFile
  48.    ::cResName  = cResName
  49.    ::bLClicked = bClick
  50.    ::lDrag     = .f.
  51.    ::lCaptured = .f.
  52.    ::lUpdate   = lUpdate
  53.  
  54.    if ! lRegistered
  55.       ::Register( nOR( CS_VREDRAW, CS_HREDRAW, CS_GLOBALCLASS ) )
  56.       lRegistered = .t.
  57.    endif
  58.  
  59.    if oWnd != nil
  60.       ::nClrText  = oWnd:nClrText
  61.       ::nClrPane  = oWnd:nClrPane
  62.       if oWnd:lVisible
  63.          ::Create()
  64.       else
  65.          oWnd:DefControl( Self )
  66.       endif
  67.    else
  68.       oWnd = GetWndDefault()
  69.       if oWnd != nil
  70.          ::nClrText = oWnd:nClrText
  71.          ::nClrPane = oWnd:nClrPane
  72.       endif
  73.    endif
  74.  
  75.    if ! Empty( cIcoFile )
  76.       ::hIcon = ExtractIcon( cIcoFile )
  77.    endif
  78.  
  79.    if ! Empty( cResName )
  80.       ::hIcon = LoadIcon( GetResources(), cResName )
  81.    endif
  82.  
  83. return nil
  84.  
  85. //----------------------------------------------------------------------------//
  86.  
  87. METHOD SetName( cNewName ) CLASS TIcon
  88.  
  89.    if ! Empty( cNewName )
  90.       ::cResName = cNewName
  91.       if ::hIcon != 0
  92.          DeleteObject( ::hIcon )
  93.       endif
  94.       ::hIcon = LoadIcon( GetResources(), cNewName )
  95.       ::Paint()
  96.    endif
  97.  
  98. return nil
  99.  
  100. //----------------------------------------------------------------------------//
  101.  
  102. METHOD LButtonDown( nRow, nCol, nKeyFlags ) CLASS TIcon
  103.  
  104.    if ::lDrag
  105.       return Super:LButtonDown( nRow, nCol, nKeyFlags )
  106.    else
  107.       if ::bLClicked != nil
  108.          Eval( ::bLClicked, nRow, nCol, nKeyFlags )
  109.       endif
  110.       return 0
  111.    endif
  112.  
  113. return nil
  114.  
  115. //----------------------------------------------------------------------------//
  116.  
  117. METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TIcon
  118.  
  119.    if nMsg == WM_PAINT
  120.       ::BeginPaint()
  121.       ::Paint()
  122.       ::EndPaint()
  123.       return 0
  124.    endif
  125.  
  126. return Super:HandleEvent( nMsg, nWParam, nLParam )
  127.  
  128. //----------------------------------------------------------------------------//
  129.