		 Marker     
		    (marker.prg, ParentClass=Custom)

      /    ,   Grid.
    Mark ,  Grid.RecordSource.    - ()    .    ,  Ins,  Shift+Up, Shift+Down   .       Grid   lblMarked     NN. 
    SumMarker (marker.prg, ParentClass=Marker)        ( ).   /      .
    RefMarker (marker.prg, ParentClass=Marker)     -   ,    .       ,     ,      relation.       Id, Name,      ,   cMarkFields.   Mark     .

 :

/              CTRL,    INS,     SHIFT+  SHIFT+,        . /                   SHIFT.                 CTRL+A.           .

 :

 - BackColor       (default = 10485760 -  RGB(0,0,160), ).
 - ForeColor       (default = 16777215 - RGB(255,255,255), ).
 - cGrid   Grid,    .   Init
 - nGridOffset - c  lblMarked    NN    Grid.  . Default=0
 - cAlias      . Default = Grid.RecordSource
 - cIdExpr	- ,  .    .(!). Default = 'Id'
 - nMarked - -  
 - nKeyMarkMode  (private)   : 0- , 1- , 2-
 - cKeyMarkId  (private)  ,     
 - cLastMarkedId  (private)    
 - lIntervalMark (private)     (Shift+LeftMouse)    refresh  SetMark   

 :

 - Init (toGrid)  . toGrid - Grid,    .    ,  DynamicColor .
 - IsMarked () : Logical -    
 - SetMark (tlForceMark)  - /    Grid.
	tlForceMark: .T. -     , .F. -  
 - AllMark () -   (     ).     ,        
 - ClearMark ()  -   
 - MarkedCaption ()  (private)     lblMarked default = :  + trans(this.nMarked)
 - RefreshMarked () (private)  (  )    lblMarked,  Grid
 - Mark ()  (private)  
 - UnMark()  (private)  
 - MouseMark (tnButton, tnShiftCtrl) -   .   Grid.MouseDown:
              thisform.oMarker.MouseMark(nButton, nShift)
 - KeyMark (tnKeyCode, tnShiftAltCtrl) -   .   Form.KeyPress:
               thisform.oMarker.KeyMark(nKeyCode, nShiftAltCtrl)

 SumMarker

 :
 - cSumExpr - ,   . Default= 'Sum'
 - nSumMarked - c   

 :
 - MarkedCaption ()  default = :  + trans(this.nMarked) + "   " + trans(this.nSumMarked)

 RefMarker

 :
 - cNameExpr - ,    . Default= 'Name'
 - cMarkFields -      
 - cMarkFile -   
 - lSaveMarkFile - (private)       .   Init

 :
 - Init (toGrid, tcMarkFile)  - tcMarkFile     ,         .  tcMarkFile  ,   
 - CreateMark () -       
 - Destroy ()      ,  

 : 

 -      Marker   MyGrid, MyTextBox.      lMarked=.T.   Marker   MyGrid.Init     MyGrid cMarkerClass  cMarkerFile:

if thisform.lMarked and not empty(this.cMarkerClass)
  thisform.NewObject('oMarker', this.cMarkerClass, this.cMarkerFile,, this)
endif

     MyTextbox.MouseDown:

if upper(this.parent.baseclass)='COLUMN' and;
   nButton = BUTTON_LEFT and nShiftCtrl <> 0 and;
   thisform.lMarked and type('thisform.oMarker') = T_OBJECT

  *       Grid   
  thisform.oMarker.MouseMark(nShift)
endif


     MyForm.KeyPress
(,  form.KeyPreview=.T.) :

if thisform.lMarked and type('thisform.oMarker') = T_OBJECT
  if thisform.oMarker.KeyMark(nKeyCode, nShiftAltCtrl)
    nodefault
    return
  endif
endif

        :

DEFINE BAR 5 OF mmm PROMPT "" KEY INS, "INS";
    SKIP FOR type("_screen.ActiveForm") <> 'O'  or _screen.activeform.baseclass <> 'Form' or;
                   not _Screen.ActiveForm.lMarked
DEFINE BAR 6 OF mmm PROMPT "  " KEY CTRL+A, "CTRL+A";
    SKIP FOR type("_screen.ActiveForm") <> 'O'  or _screen.activeform.baseclass <> 'Form' or;
                   not _Screen.ActiveForm.lMarked
DEFINE BAR 7 OF mmm PROMPT " ";
    SKIP FOR type("_screen.ActiveForm") <> 'O'  or _screen.activeform.baseclass <> 'Form' or;
                   not _Screen.ActiveForm.lMarked

ON SELECTION BAR 5 OF mmm _screen.activeform.oMarker.Setmark()
ON SELECTION BAR 6 OF mmm _screen.activeform.oMarker.AllMark()
ON SELECTION BAR 7 OF mmm _screen.activeform.oMarker.ClearMark()

  RefMarker        
 < Id c(lId), Name c(lName) >,  lCode, lName    -,   cIdExpr, cNameExpr.         Mark.  Destroy    ,         .        ,   cMarkFields. , cMarkFields = Quan n(7,3), Price n(12,2), Sum n(12,2).        Mark.

 lblMarked   Marker.RefreshMarked    nGridOffset.     Grid      Anchor.       lblMarked   ,   

      TestMark1(2,3).
   LOAD   !!!

!
 
