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.