How to align column labels in dynamic Browse widget?

Posted by Fuelfire on 06-Aug-2015 02:08

Hi, all! I created a frame with dynamic browses and queries. I want to align column titles in the middle. I found an article in the knowledge base, which shows how to do it in a static browse. I do not understand how to do it in a dynamic widget? Does anyone have any thoughts?

CREATE QUERY h_qry.
h_qry:SET-BUFFERS(BUFFER hh_imp_corp:HANDLE).
RetVal = h_qry:ADD-BUFFER(BUFFER d_cur:HANDLE).

CREATE BROWSE hBrowse

    ASSIGN TITLE    = "Details" 
                    NAME     = "B-R"
                    ROW       = 5
                    COL         = 58
                    WIDTH   = 65.5
                    DOWN   = 10.5
                    HEIGHT =  9
                    VISIBLE = TRUE
                    QUERY     = h_qry
                    FRAME     = FRAME D1:HANDLE
                    READ-ONLY = FALSE
                    SENSITIVE = TRUE
                    SEPARATORS = TRUE
                    ROW-MARKERS = NO
                    NO-VALIDATE = YES
                    COLUMN-MOVABLE = TRUE
                    COLUMN-RESIZABLE = TRUE
                    NO-EMPTY-SPACE = TRUE
                    
                    FONT      = {&browse-smallest-font}

    TRIGGERS:
        ON ROW-DISPLAY
        DO:      
                      IF AVAILABLE(hh_imp_corp)
                      THEN DO:
                           IF VALID-HANDLE(hCalcCol)
                           THEN DO:
                              ASSIGN hCalcCol:SCREEN-VALUE = (IF hh_imp_corp.oper = 1 THEN "Debet" ELSE "Credit")
                                                hCalcCol:BGCOLOR = (IF hh_imp_corp.oper = 1 THEN 11 ELSE  8).
                           END.
                      END.

        END.
END TRIGGERS.
 
/*hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.id").
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.ActionId").  */
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.ValueDate"). 
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.FixDate"). 
/*hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.Event"). */
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.TradePlace").
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.EventCode"). 
hCalcCol = hBrowse:ADD-CALC-COLUMN("CHAR",      /* Data type */
                                                            "X(15)",            /* Format */
                                                             "",                        /* Initial value */
                                                            "Operation"). /* column label */
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.Quantity"). 
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.Rate").
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.SumTaxFree"). 
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.SumTax"). 
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.SumTaxOther"). 
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.SumTotal"). 
hBrowse:ADD-LIKE-COLUMN("d_cur.short_name").
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.content").
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.FilePath").
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.ActionRef").
hBrowse:ADD-LIKE-COLUMN("hh_imp_corp.ActionId").

hBrowse:REFRESH() NO-ERROR.

hCol = hBrowse:FIRST-COLUMN.
DO WHILE VALID-HANDLE(hCol):
CASE hCol:LABEL:
    WHEN "Event" THEN ASSIGN hCol:WIDTH = 6.
    WHEN "Reference" THEN ASSIGN hCol:WIDTH = 11.
    WHEN "Trade place" THEN ASSIGN hCol:WIDTH = 6.
    WHEN "Event code" THEN ASSIGN hCol:WIDTH = 6.                                                                                  
    WHEN "Tiker" THEN ASSIGN hCol:WIDTH = 7.
    WHEN "Quantity" THEN ASSIGN hCol:WIDTH = 10.
    .....
END CASE.
hCol = hCol:NEXT-COLUMN.
END.


All Replies

Posted by Dileep Dasa on 06-Aug-2015 05:07

I didn't find any straightforward method but this can be a workaround. It sets the label of a column and then positions it:

hBrowse:GET-BROWSE-COLUMN (2):LABEL = "MyLabel":C50.


Posted by Fuelfire on 06-Aug-2015 09:52

It's work. But how to calculate the digit after "C"? If i write:

hCol:LABEL = "Label":C.


No alignment occurs!

Posted by nborshukov on 17-Aug-2015 04:10

Try this procedure.

PROCEDURE center-browse-column-labels:
define input parameter br-h as handle no-undo. /* browse widget handle */
define input parameter col-no-list as character no-undo. /* CAN-DO function id-pattern-list with column numbers to center labels */

define variable col-h as handle no-undo.
define variable i as integer no-undo.
define variable c-lbl as character no-undo.
define variable lbl-wid as integer no-undo.
define variable spc-wid as integer no-undo.
define variable num-spc as integer no-undo.

   do i = 1 to br-h:num-columns:
       if can-do(col-no-list,string(i)) then do:
           col-h = br-h:get-browse-column(i).
           c-lbl = trim(col-h:label).
           lbl-wid = font-table:get-text-width-pixels(c-lbl,col-h:label-font).
           if lbl-wid < col-h:width-pixels then do:
               spc-wid = font-table:get-text-width-pixels(" ":U,col-h:label-font).    
               num-spc = truncate((col-h:width-pixels - lbl-wid) / (spc-wid * 2),0).
               if num-spc > 0 then
                   col-h:label = fill(" ":U,num-spc) + c-lbl.
           end.
       end.    
   end.
END PROCEDURE.


This thread is closed