changing row colour in dyn data browsers

sseguron

New Member
Hi guys,

I would like to be able to change color of rows in dynamic data browsers.
Here is what i did :

in browsercustom.p

in 'initializeObject' :

DEFINE VARIABLE lhBrowseHdl AS HANDLE NO-UNDO.
DEFINE VARIABLE lhColHdl AS HANDLE NO-UNDO.
DEFINE VARIABLE lcColHdls AS CHARACTER NO-UNDO.
DEFINE VARIABLE lhContainer AS HANDLE NO-UNDO.

RUN SUPER.

IF NOT DYNAMIC-FUNCTION('getUIBMode':U IN TARGET-PROCEDURE) BEGINS "DESIGN" THEN DO:
ASSIGN
lcColHdls = ""
lhBrowseHdl = DYNAMIC-FUNCTION('getBrowseHandle':U IN TARGET-PROCEDURE)
lhContainer = DYNAMIC-FUNCTION('getContainerSource':U IN TARGET-PROCEDURE)
lhColHdl = lhBrowseHdl:FIRST-COLUMN.

DO WHILE VALID-HANDLE(lhColHdl):
ASSIGN
lcColHdls = IF lcColHdls <> "":U THEN
lcColHdls + ",":U + STRING(lhColHdl)
ELSE
STRING(lhColHdl)
lhColHdl = lhColHdl:NEXT-COLUMN.
END.

IF VALID-HANDLE(lhContainer) THEN DO:
MESSAGE lhbrowsehdl lhcontainer lccolhdls.

ON "row-display":U OF lhBrowseHdl
PERSISTENT RUN changecouleur IN lhContainer (lhBrowseHdl,lcColHdls).
END.
END.
END PROCEDURE.

And finally, in my container (ie a smart window), i defined my proc

'changecouleur' :

DEFINE INPUT PARAMETER iphBrwHdl AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER ipcColHdls AS CHARACTER NO-UNDO.

DEFINE VARIABLE lhColHdl AS HANDLE NO-UNDO.
DEFINE VARIABLE liPos AS INTEGER NO-UNDO.

DO liPos = 1 TO NUM-ENTRIES(ipcColHdls):
ASSIGN lhColHdl = WIDGET-HANDLE(ENTRY(liPos,gcColHdls))
lhColHdl:FGCOLOR = 9
lhColHdl:BGCOLOR = 12.
END.

END PROCEDURE.


The result :
- i sometimes get to 'changecouleur' be executed (only the second time the object is viewed - not the first time).
- when it does execute, the widgets in the list 'ipcColHdls' are indicated 'not valid'.

I would really welcome your help, as it is an important issue for us to be able to colour our rows as we like.

Thanks in advance.

Sylvestre SEGURON
 
In NON-Smart Object, you can set the FGCOLOR on ROW-DISPLAY using a simple ASSIGN Tblname.Fieldname:FGCOLOR IN BROWSE br-Name.

We don't do Smart Obj, so this may not apply at all. Sorry if that's the case.

HTH
 
Have a look here

or at Progress Knowledgebase 21024

If you are using Progress's Dynamic Browser, I have included a procedure called colourRow in dynbrowser.w as below

PROCEDURE ColourRow :
/*------------------------------------------------------------------------------
Purpose:
Parameters: <none>
Notes:
------------------------------------------------------------------------------*/
DEF INPUT PARAM ip-Color AS INT NO-UNDO.
DEF VAR cFields AS CHAR NO-UNDO.
DEF VAR hField AS HANDLE NO-UNDO.
DEF VAR iLoop AS INT NO-UNDO.

{get FieldHandles cFields}.
DO iLoop = 1 TO NUM-ENTRIES(cFields):
ASSIGN hField = WIDGET-HANDLE(ENTRY(iLoop,cFields))
hField:FGCOLOR = ip-Color.
END.
END PROCEDURE.
 
Thanks norman for your code. it works fine.

How do you change row colour depending on cell values, because inside row-display trigger there are few things we can query.

See you

:chat:
 
I have amended dynbrowser.w to publish "ROW-DISPLAY" within the ROW-DISPLAY trigger of the browser.

In my initializeObjects procedure in the SmartWindow/Frame, I have

SUBSCRIBE TO 'ROW-DISPLAY' IN h_dynbrowser RUN-PROCEDURE 'p-Row-Display'.

Also in the SmartWindow/Frame I have

PROCEDURE p-Row-Display:
/* RUN ColourTest IN h_dynbrowser("table field","match",colour). */
RUN ColourTest IN h_dynbrowser("Processed","No",12).
END PROCEDURE.

The above example would display any record with the Processed field set to no in Red.

Back on dynbrowser.w, I have another Procedure:

PROCEDURE ColourTest :
DEF INPUT PARAM ip-Field AS CHAR NO-UNDO.
DEF INPUT PARAM ip-Value AS CHAR NO-UNDO.
DEF INPUT PARAM ip-Color AS INT NO-UNDO.

DEF VAR hDataSource AS HANDLE NO-UNDO.
DEF VAR cValue AS CHAR NO-UNDO.

{get DataSource hDataSource}.
ASSIGN cValue = {fnarg columnStringValue ip-Field hDataSource}.

IF cValue EQ ip-Value THEN
RUN ColourRow(ip-Color).

END PROCEDURE.

You already have the code for ColourRow.
 
final thanks for your valuable feedback. It allowed us to save long dev time.
We really thank the forum as a whole and you in particular for this point. It has helped a few times us since we started our project on ADM2.
 
Back
Top