Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Grid Highlight Problem - Can you Duplicate it?
Message
De
14/09/2005 09:51:51
 
 
À
14/09/2005 09:32:22
Information générale
Forum:
Visual FoxPro
Catégorie:
Gestionnaire d'écran & Écrans
Versions des environnements
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Network:
Windows 2003 Server
Database:
Visual FoxPro
Divers
Thread ID:
01049139
Message ID:
01049407
Vues:
21
SNIP

where fail this?
set safety OFF
set talk OFF
set exact ON
set near OFF
CLOSE TABLES all
CLOSE DATABASES all

CREATE TABLE tpolicy(po_number c(25), po_status c(3), po_name c(20))
APPEND BLANK
REPLACE po_name WITH "John T. Smith"
REPLACE po_number WITH "123456"
REPLACE po_status WITH "CXP"
APPEND BLANK
REPLACE po_name WITH "Sally A. Taylor"
REPLACE po_number WITH "789012"
REPLACE po_status WITH "NB"
APPEND BLANK
REPLACE po_name WITH "Craig Abernathy"
REPLACE po_number WITH "AAB123"
REPLACE po_status WITH "REN"
APPEND BLANK
REPLACE po_name WITH "Chris Johnson"
REPLACE po_number WITH "890123"
REPLACE po_status WITH "AP"
sele 0
CREATE TABLE vstatus (st_status c(3), st_attrib c(16))
APPEND BLANK
REPLACE st_status WITH "CXP"
REPLACE st_attrib WITH "RGB(255,128,192)"
APPEND BLANK
REPLACE st_status WITH "NB"
REPLACE st_attrib WITH "RGB(255,255,0)"
APPEND BLANK
REPLACE st_status WITH "AP"
REPLACE st_attrib WITH "RGB(128,255,255)"

COPY TO ARRAY _vstatus FIELDS ST_STATUS, ST_ATTRIB FOR !EMPTY(ST_STATUS)

SELE tpolicy
GO top

oform = createobj('testform')

oform.show()
oform.SetPolicyGridColor()
oform.refresh()

read events

CLOSE tables ALL
return

DEFINE CLASS testform AS form


   Top = 0
   Left = 0
   Height = 227
   Width = 461
   DoCreate = .T.
   Caption = "Test Highlight Change "
   *-- Specifies the grid's selected row background color.
   highlightbackcolor = .F.
   *-- Specifies whether the selected row is highlighted and also if it remains highlighted when user changes focus to another control on the form.
   highlightstyle = .F.
   gridbackcolor = .F.
   gridforecolor = .F.
   Name = "TESTFORM"


   ADD OBJECT grid1 AS grid WITH ;
   	Anchor = 10, ;
      ColumnCount = 3, ;
      Height = 200, ;
      Left = 24, ;
      Panel = 1, ;
      RecordSource = "tpolicy", ;
      RecordSourceType = 1, ;
      Top = 12, ;
      Width = 410, ;
      Themes = .F., ;
      HighlightBackColor = RGB(0,128,192), ;
      HighlightForeColor = RGB(0,0,0), ;
      SelectedItemBackColor = RGB(0,128,192), ;
      SelectedItemForeColor = RGB(0,0,0), ;
      HighlightStyle = 2, ;
      Name = "grid1", ;
      Column1.ControlSource = "tpolicy.po_number", ;
      Column1.Width = 154, ;
      Column1.Name = "Column1", ;
      Column2.ControlSource = "tpolicy.po_status", ;
      Column2.Name = "Column2",;
      Column3.ControlSource = "tpolicy.po_name", ;
      Column3.Width = 154, ;
      Column3.Name = "Column3"


   PROCEDURE setpolicygridcolor
      WITH this.grid1
         FOR nColumnID = 1 TO .columncount
            colorvalue = thisform.getpolicygridcolor(.recordsource,.columns(nColumnID).controlsource)
            .Columns(nColumnID).dynamicbackcolor = colorvalue
            .Columns(nColumnID).Controls[2].BACKCOLOR = THISFORM.HIGHLIGHTBACKCOLOR 
         ENDFOR
      ENDWITH
   ENDPROC


   PROCEDURE getpolicygridcolor
      LPARAMETERS tcolortable, tcolorfield

      EXTERNAL ARRAY _vstatus
      EXTERNAL ARRAY _vtype

      defaultcolorvalue = "RGB(255,255,255)"

      IF EMPTY(tcolortable) .OR. TYPE('tcolortable') <> "C" .OR. !USED(tcolortable)
         RETURN defaultcolorvalue
      ENDIF
      IF TYPE('tcolorfield') <> "C" .OR. EMPTY(tcolorfield)
         RETURN defaultcolorvalue
      ENDIF
      IF AT('.',tcolorfield) > 0
         tcolorfield = SUBSTR(tcolorfield,AT('.',tcolorfield)+1)
      ENDIF

      tcolorfield = UPPER(ALLTRIM(tcolorfield))

      SELECT (tcolortable)

      DO CASE
         CASE tcolorfield = "PO_SUSP"
            RETURN "IIF(!EMPTY(po_status),IIF(ASCAN(_vstatus,po_status)>0,IIF(!EMPTY(_vstatus(ASCAN(_vstatus,po_status)+1)),EVALUATE(_vstatus(ASCAN(_vstatus,po_status)+1)),RGB(255,255,255)),RGB(255,255,255)),RGB(255,255,255))"
         CASE tcolorfield = "PO_STATUS"
            RETURN "IIF(!EMPTY(po_status),IIF(ASCAN(_vstatus,po_status)>0,IIF(!EMPTY(_vstatus(ASCAN(_vstatus,po_status)+1)),EVALUATE(_vstatus(ASCAN(_vstatus,po_status)+1)),RGB(255,255,255)),RGB(255,255,255)),RGB(255,255,255))"
         CASE tcolorfield = "PO_TYPE"
            RETURN "IIF(!EMPTY(po_type),IIF(ASCAN(_vtype,po_type)>0,IIF(!EMPTY(_vtype(ASCAN(_vtype,po_type)+2)),EVALUATE(_vtype(ASCAN(_vtype,po_type)+2)),RGB(255,255,255)),RGB(255,255,255)),RGB(255,255,255))"
      ENDCASE

      RETURN defaultcolorvalue
   ENDPROC


   PROCEDURE highlight_row
      THISFORM.LOCKSCREEN = .T.

      PRIVATE llsethighlight
      llsethighlight = .F.

      WITH THISFORM.grid1

         FOR lnColumn = 1 TO .COLUMNCOUNT

            PRIVATE loCurrentControl
            STORE NULL TO loCurrentControl
            FOR EACH loControl IN .COLUMNS(lnColumn).CONTROLS
               IF loControl.NAME = loControl.PARENT.CURRENTCONTROL
                  loCurrentControl = loControl
               ENDIF
            ENDFOR

            IF TYPE("loCurrentControl") = "O" AND NOT ISNULL(loCurrentControl)
               IF LOWER(loCurrentControl.BASECLASS) = "textbox" .OR. LOWER(loCurrentControl.BASECLASS) = "editbox"
                  IF PEMSTATUS(loCurrentControl, "BackColor", 5 ) && Some controls in the column (i.e. Image) may not have .BackColor Property
					IF EMPTY(.COLUMNS(lnColumn).DYNAMICBACKCOLOR);
						OR EVALUATE(.COLUMNS(lnColumn).DYNAMICBACKCOLOR) = THISFORM.gridbackcolor
                       	.Columns(lnColumn).Sparse = .T.
					ELSE
                        .COLUMNS(lnColumn).SPARSE = .F.
                      *  llsethighlight = .T.   && change the highlightstyle on the grid
                    ENDIF
                  ENDIF
               ENDIF
            ENDIF

         ENDFOR

         IF llsethighlight
			DEBUGOUT "clear"
            .HIGHLIGHTSTYLE = 0   && do not show the highlight - we emulate a highlight
         ELSE
			DEBUGOUT "restore"
            .HIGHLIGHTSTYLE = THISFORM.HIGHLIGHTSTYLE && set the highlight back to the default
         ENDIF

      ENDWITH

      THISFORM.LOCKSCREEN = .F.
   ENDPROC


   PROCEDURE Destroy
      DODEFAULT()
      CLEAR EVENTS
   ENDPROC


   PROCEDURE Init
      DODEFAULT()
      WITH this.grid1
         thisform.highlightbackcolor = .highlightbackcolor
         thisform.highlightstyle     = .highlightstyle
         thisform.gridbackcolor      = .backcolor
         thisform.gridforecolor      = .forecolor
      ENDWITH
      this.highlight_row()
   ENDPROC


   PROCEDURE grid1.AfterRowColChange
      LPARAMETERS nColIndex
      thisform.highlight_row()
   ENDPROC


ENDDEFINE
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform