Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Grid Highlight Problem - Can you Duplicate it?
Message
De
14/09/2005 10:29:31
 
 
À
14/09/2005 09:51:51
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:
01049443
Vues:
28
It works Fabio, except that it still displays the same issue I am trying to resolve. When moving between rows in the grid, the left margin of column 2 shifts so the data 'jiggles' around. It only occurs when moving between row2 and row3 and row3 and row4 (due to toggling sparse .t./.f.) I can get the row highlighting to work by toggling sparse on/off but then the column width or margin seems to change and the data shifts around and is a visual nuisance.


>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
>
.·*´¨)
.·`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