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
 

dkellgren

Member
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.
 

sseguron

New Member
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.
 

sseguron

New Member
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.
 
Top