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:09:39
 
 
À
13/09/2005 18:56:03
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:
01049374
Vues:
17
Thank you Fabio. I have done that, however, on subsequent rows in the same grid, if the value in the cell determines that the background color should not be 'special' but instead be the default grid backcolor (this is based on the value in that field), I cannot get that cell to display correctly without toggling sparse back on. Then it is the toggling of sparse on/off that seems to shift the contents in the cell left/right.
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 "
   *-- 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 ;
      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
         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)
                        loCurrentControl.BACKCOLOR = EVALUATE(.COLUMNS(lnColumn).DYNAMICBACKCOLOR)
                        IF loCurrentControl.BACKCOLOR = THISFORM.gridbackcolor
                           .Columns(lnColumn).Sparse = .t.
                           loCurrentControl.BACKCOLOR = THISFORM.HIGHLIGHTBACKCOLOR
                        ELSE
                          .COLUMNS(lnColumn).SPARSE = .F.
                           llsethighlight = .T.   && change the highlightstyle on the grid
                        ENDIF
                     ELSE
                        .Columns(lnColumn).Sparse = .t.
                        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
      ENDWITH
      this.highlight_row()
   ENDPROC


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


ENDDEFINE
>>Any ideas anyone?
>
>If you wish that dynamic win respect Highlight, set Sparse = .F.
>
>   WITH THIS.grid1
>      THISFORM.HIGHLIGHTBACKCOLOR = .HIGHLIGHTBACKCOLOR
>      THISFORM.HIGHLIGHTSTYLE     = .HIGHLIGHTSTYLE
>      THISFORM.gridbackcolor      = .BACKCOLOR
>      THISFORM.gridforecolor      = .FORECOLOR
>
>     *****  AAAAADDDDDDDDEEEEDDDDDD ********
>      .columns[2].Sparse = .F.
>   ENDWITH
>
>
>Remember:
>every CurrentControl.BackColor set in AfterRCC is annulled by the following cycle of paint.
.·*´¨)
.·`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
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform