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.
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.
It's work. But how to calculate the digit after "C"? If i write:
hCol:LABEL = "Label":C.
No alignment occurs!
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.