Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Change Grid Highlight to Match column dynamicbackcolor
Message
De
09/09/2005 14:12:20
 
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Versions des environnements
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Network:
Windows 2003 Server
Database:
Visual FoxPro
Divers
Thread ID:
01047867
Message ID:
01048217
Vues:
24
When the column's sparse property is toggled, the cell 'flickers' and adjusts in width which is annoying. Somehow I'd like to do this without adjusting the column's sparse property.
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 ALL
return

DEFINE CLASS testform AS form

   Top = 0
   Left = 0
   Height = 227
   Width = 461
   DoCreate = .T.
   Caption = "Test Highlight Change "
   highlightbackcolor = .F.
   highlightstyle = .F.
   gridbackcolor = .F.
   gridforecolor = .F.
   gridhighlightforecolor = .F.
   cvalue = ""
   Name = "TESTFORM"


   ADD OBJECT grid1 AS grid WITH ;
      ColumnCount = 2, ;
      Height = 200, ;
      Left = 24, ;
      Panel = 1, ;
      RecordSource = "tpolicy", ;
      RecordSourceType = 1, ;
      Top = 12, ;
      Width = 310, ;
      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 = 160, ;
      Column1.Name = "Column1", ;
      Column2.ControlSource = "tpolicy.po_status", ;
      Column2.Width = 160, ;
      Column2.Name = "Column2"


   PROCEDURE setpolicygridcolor
      WITH this.grid1
         FOR nColumnID = 1 TO .columncount
            colorvalue = thisform.getpolicygridcolor(.recordsource,.columns(nColumnID).controlsource)
            .Columns(nColumnID).dynamicbackcolor = colorvalue
         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

            .COLUMNS(lnColumn).SPARSE = .T.   && default all columns to .t.

            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)
                        loCurrentControl.BACKCOLOR = EVALUATE(.COLUMNS(lnColumn).DYNAMICBACKCOLOR)
                        IF loCurrentControl.BACKCOLOR = THISFORM.gridbackcolor
                           loCurrentControl.BACKCOLOR = THISFORM.HIGHLIGHTBACKCOLOR
                        ELSE
                           .COLUMNS(lnColumn).SPARSE = .F.
                           llsethighlight = .T.   && change the highlightstyle on the grid
                        ENDIF
                     ELSE
                        loCurrentControl.BACKCOLOR = THISFORM.HIGHLIGHTBACKCOLOR
                     ENDIF
                  ENDIF
               ENDIF
            ENDIF


         ENDFOR

         IF llsethighlight
            .HIGHLIGHTSTYLE = 0   && do not show the highlight - we emulate a highlight
         ELSE
            .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
         thisform.gridhighlightforecolor = .highlightforecolor
      ENDWITH
      this.highlight_row()
      this.refresh()
   ENDPROC

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

ENDDEFINE
.·*´¨)
.·`TCH
(..·*

010000110101001101101000011000010111001001110000010011110111001001000010011101010111001101110100
"When the debate is lost, slander becomes the tool of the loser." - Socrates
Vita contingit, Vive cum eo. (Life Happens, Live With it.)
"Life is not measured by the number of breaths we take, but by the moments that take our breath away." -- author unknown
"De omnibus dubitandum"
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform