发信人: foxzz() 
整理人: hunter__fox(2002-03-16 22:47:22), 站内信件
 | 
 
 
请参考: 
 1、设置控件的enabled=.f. 
 2、在基类增加方法:setallprop() 
    进一步,增加控件访问管理属性access,以下程序供参考: 
 LPARAMETER oContainer,cContainerType 
 * Checks for General fields 
 LOCAL i,oControlParent,j 
 PUBL LCURROBJECT 
 LCURROBJECT='' 
 IF PARA()=0 
 m.oControlParent = THISFORM 
 m.cContainerType='1' 
 ELSE 
 m.oControlParent = m.oContainer 
 ENDIF 
 IF EMPTY(m.cContainerType) 
    m.cContainerType='1' 
 ENDIF 
 IF ATC("PageFrame1",m.oControlParent.name)  # 0 
    FOR I=1 TO M.oControlParent.PageCount 
        THIS.SetAllProp(m.oControlParent.pages[m.i]) 
    ENDFOR 
    return .t. 
 ENDIF 
 LOCAL LLCUROBJECTRIGHT 
 LLCUROBJECTRIGHT=.T. 
 IF m.cContainerType='2'              && Commandgroup 
    FOR i = 1 TO m.oControlParent.ButtonCount 
        DO CASE 
        CASE ATC(m.oControlParent.Buttons[m.i].BaseClass,"Commandbutton 
 ,CheckBox,TextBox,OleBoundControl,ComBobox,EditBox,SPINNER,Listbox") # 
  0 
             LCURROBJECT=m.oControlParent.Buttons[m.i].NAME 
             IF TYPE('m.oControlParent.BUTTONS[m.i].RIGHTS')<>'U' 
                LLCUROBJECTRIGHT=m.oControlParent.BUTTONS[m.i].RIGHTS 
             ENDIF 
             IF TYPE('m.oControlParent.Buttons[m.i].access')='U' 
                m.oControlParent.Buttons[m.i].Enabled = _SCREEN.ACTIVEF 
 ORM.lAllowEdits ; 
                            AND LLCUROBJECTRIGHT 
             ELSE 
                IF m.oControlParent.Buttons[m.i].access 
                   m.oControlParent.Buttons[m.i].Enabled = _SCREEN.ACTI 
 VEFORM.lAllowEdits ; 
                            AND LLCUROBJECTRIGHT 
                ENDIF 
             ENDIF 
        ENDCASE 
    ENDFOR 
    RETURN .T. 
 ENDIF 
 IF .f. and m.cContainerType='3'     && Grid 
    FOR i = 1 TO m.oControlParent.ColumnCount 
        DO CASE 
        CASE ATC(m.oControlParent.Columns[m.i].BaseClass,"Commandbutton 
 ,CheckBox,TextBox,OleBoundControl,ComBobox,EditBox,SPINNER,Listbox") # 
  0 
             LCURROBJECT=m.oControlParent.Columns[m.i].NAME 
             IF TYPE('m.oControlParent.Columns[m.i].RIGHTS')<>'U' 
                LLCUROBJECTRIGHT=m.oControlParent.Columns[m.i].RIGHTS 
             ENDIF 
             IF TYPE('m.oControlParent.Columns[m.i].access')='U' 
                m.oControlParent.Columns[m.i].Enabled = _SCREEN.ACTIVEF 
 ORM.lAllowEdits ; 
                            AND LLCUROBJECTRIGHT 
             ELSE 
                IF m.oControlParent.Columns[m.i].access 
                   m.oControlParent.Columns[m.i].Enabled = _SCREEN.ACTI 
 VEFORM.lAllowEdits ; 
                            AND LLCUROBJECTRIGHT 
                ENDIF 
             ENDIF 
        ENDCASE 
        THIS.SetAllProp(m.oControlParent.Columns[m.i]) 
    ENDFOR 
    RETURN .T. 
 ENDIF 
 IF m.cContainerType='1' 
    FOR i = 1 TO m.oControlParent.ControlCount 
        IF TYPE('m.oControlParent.Controls[m.i].RIGHTS')<>'U' 
           LLCUROBJECTRIGHT=m.oControlParent.Controls[m.i].RIGHTS 
        ENDIF 
 DO CASE 
 CASE ATC("Page",m.oControlParent.Controls[m.i].BaseClass) # 0 
 THIS.SetAllProp(m.oControlParent.Controls[m.i]) 
 CASE ATC("Container",m.oControlParent.Controls[m.i].BaseClass) # 0 
 THIS.SetAllProp(m.oControlParent.Controls[m.i]) 
 CASE ATC("Commandgroup",m.oControlParent.Controls[m.i].BaseClass) # 0 
 THIS.SetAllProp(m.oControlParent.Controls[m.i],'2') 
 CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"Commandbutton,Chec 
 kBox,TextBox,OleBoundControl,ComBobox,EditBox,SPINNER,Listbox") # 0 
          LCURROBJECT=m.oControlParent.Controls[m.i].NAME 
 
          IF TYPE('m.oControlParent.Controls[m.i].access')='U' 
             m.oControlParent.Controls[m.i].Enabled = _SCREEN.ACTIVEFOR 
 M.lAllowEdits ; 
                AND LLCUROBJECTRIGHT 
          ELSE 
             IF m.oControlParent.Controls[m.i].access 
                m.oControlParent.Controls[m.i].Enabled = _SCREEN.ACTIVE 
 FORM.lAllowEdits ; 
                            AND LLCUROBJECTRIGHT 
             ENDIF 
          ENDIF 
          IF 'NOACCESS' $ m.oControlParent.Controls[m.i].TAG 
              m.oControlParent.Controls[m.i].Enabled =.F. 
          ENDIF 
 
          && 刷新代码意义 
          IF m.oControlParent.Controls[m.i].BaseClass='TextBox' 
               IF TYPE('m.oControlParent.Controls[m.i].LCODENAME')<>'U' 
   AND m.oControlParent.Controls[m.i].LCODENAME 
                   m.oControlParent.Controls[m.i].VALUE='' 
               ENDIF 
          ENDIF 
 CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"EditBox") # 0 
          IF TYPE('m.oControlParent.Controls[m.i].access')='U' 
      m.oControlParent.Controls[m.i].ReadOnly = !_SCREEN.ACTIVEFORM.lA 
 llowEdits ; 
                AND LLCUROBJECTRIGHT 
       ELSE 
             IF m.oControlParent.Controls[m.i].access 
                m.oControlParent.Controls[m.i].ReadOnly = !_SCREEN.ACTI 
 VEFORM.lAllowEdits ; 
                     AND LLCUROBJECTRIGHT 
             ENDIF 
       ENDIF 
 IF .F. AND !THIS.HasMemo 
 WITH m.oControlParent.Controls[m.i] 
 THIS.EditForeColor = .ForeColor 
 THIS.EditDisForeColor =  .DisabledForeColor 
 THIS.EditBackColor = .BackColor 
 THIS.EditDisBackColor =  .DisabledBackColor 
 THIS.HasMemo = .T. 
 ENDWITH 
 ENDIF 
 IF .F. 
    m.oControlParent.Controls[m.i].ForeColor = IIF(_SCREEN.ACTIVEFORM 
 .lAllowEdits,_SCREEN.ACTIVEFORM.EditForeColor,_SCREEN.ACTIVEFORM.EditD 
 isForeColor) 
            m.oControlParent.Controls[m.i].BackColor = IIF(_SCREEN.ACTI 
 VEFORM.lAllowEdits,_SCREEN.ACTIVEFORM.EditBackColor,_SCREEN.ACTIVEFORM 
 .EditDisBackColor) 
         ENDIF 
          IF 'NOACCESS' $ m.oControlParent.Controls[m.i].TAG 
              m.oControlParent.Controls[m.i].Enabled =.F. 
          ENDIF 
 CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"Grid") # 0 
          IF TYPE('m.oControlParent.Controls[m.i].access')='U' 
             m.oControlParent.Controls[m.i].Enabled = _SCREEN.ACTIVEFOR 
 M.lAllowEdits 
             m.oControlParent.Controls[m.i].DeleteMark =_SCREEN.ACTIVEF 
 ORM.lAllowEdits 
           m.oControlParent.Controls[m.i].READONLY = NOT _SCREEN.ACTIVE 
 FORM.lAllowEdits 
 IF .F. 
               IF _SCREEN.ACTIVEFORM.lAllowEdits 
                  m.oControlParent.Controls[m.i].Enabled = .T. 
                  m.oControlParent.Controls[m.i].DeleteMark = .T. 
                  m.oControlParent.Controls[m.i].READONLY = .F. 
               ELSE 
                  m.oControlParent.Controls[m.i].Enabled = .T. 
                  m.oControlParent.Controls[m.i].DeleteMark = .F. 
                  m.oControlParent.Controls[m.i].READONLY = .T. 
               ENDIF 
 ENDIF 
      ELSE 
             IF m.oControlParent.Controls[m.i].access 
                m.oControlParent.Controls[m.i].Enabled = _SCREEN.ACTIVE 
 FORM.lAllowEdits 
                m.oControlParent.Controls[m.i].DeleteMark =_SCREEN.ACTI 
 VEFORM.lAllowEdits 
                m.oControlParent.Controls[m.i].READONLY = NOT _SCREEN.A 
 CTIVEFORM.lAllowEdits 
 IF .F. 
               IF _SCREEN.ACTIVEFORM.lAllowEdits 
                  m.oControlParent.Controls[m.i].Enabled = .T. 
                  m.oControlParent.Controls[m.i].DeleteMark = .T. 
                  m.oControlParent.Controls[m.i].READONLY = .F. 
               ELSE 
                  m.oControlParent.Controls[m.i].Enabled = .T. 
                  m.oControlParent.Controls[m.i].DeleteMark = .F. 
                  m.oControlParent.Controls[m.i].READONLY = .T. 
               ENDIF 
 ENDIF 
             ELSE 
                && m.oControlParent.Controls[m.i].ENABLED = !_SCREEN.AC 
 TIVEFORM.lAllowEdits 
                && m.oControlParent.Controls[m.i].DeleteMark =!_SCREEN. 
 ACTIVEFORM.lAllowEdits 
             ENDIF 
             && THIS.SetAllProp(m.oControlParent.Controls[m.i],'3') 
 
 &&     m.oControlParent.Controls[m.i].ENABLED = _SCREEN.ACTIVEFORM.lA 
 llowEdits 
 &&      m.oControlParent.Controls[m.i].DeleteMark =_SCREEN.ACTIVEFORM. 
 lAllowEdits 
  ENDIF 
 ENDCASE 
   ENDFOR 
 ENDIF 
 && 
 3、增加modify方法: 
 LPARAMETER oContainer,cContainerType 
 * Checks for General fields 
 LOCAL i,oControlParent,j 
 PUBL LCURROBJECT 
 LCURROBJECT='' 
 IF PARA()=0 
 m.oControlParent = THISFORM 
 m.cContainerType='1' 
 ELSE 
 m.oControlParent = m.oContainer 
 ENDIF 
 IF EMPTY(m.cContainerType) 
    m.cContainerType='1' 
 ENDIF 
 IF ATC("PageFrame1",m.oControlParent.name)  # 0 
    FOR I=1 TO M.oControlParent.PageCount 
        THIS.SetAllProp(m.oControlParent.pages[m.i]) 
    ENDFOR 
    return .t. 
 ENDIF 
  | 
 
 
 |