2014年10月1日 星期三

畫面能夠依資料內容來變更文字顏色、樣式

http://4shiun.blogspot.tw/2013/02/blog-post.html

畫面能夠依資料內容來變更文字顏色、樣式

TIPTOP的畫面設計比較偏向 TEXT-Mode ,所以會以比較單調樣式來呈現,
現在應該沒有人在用這種方式了吧,都是用 GUI 的方式來使用。
這樣就可以添加一些色彩、底線、粗體,來增加使用者操作上資料的辦識能力。

依 4js 的說明,在 DISPLAY 可以加上屬性,如下:
1. BLACK, BLUE, CYAN, GREEN, MAGENTA, RED, WHITE, YELLOW – 顯示顏色
2. BOLD, DIM, NORMAL – 顯示字體樣式
3. REVERSE, BLINK, UNDERLINE – 顯示文字的屬性

屬性的字面上的意思就能知道用途了,多重屬性時只要加上逗號來區隔,就不多加說明了。

例如我們想要 sfb01 這個欄位在某些情況下顯示藍色時,只要加判斷再加上 ATTRIBUTE,
例:
IF g_sfb01.sfb04 = '8' THEN
    DISPLAY BY NAME g_sfb01.sfb01 ATTRIBUTE(BLUE)
ELSE
    DISPLAY BY NAME g_sfb01.sfb01 ATTRIBUTE(BLACK)
END IF

鼎新也有提供 lib 的函式來改變顏色:
CALL cl_set_comp_font_color("sfb01,sfb02","RED")

但是如果是單身的話會用 DISPLAY ARRAY 就只能所有單身全部的顏色都變一樣,
要改用 DIALOG.setCellAttributes 的方式來顯示欄位的屬性。
例:
要先定義單身有那些是要動態變更欄位屬性的陣列變數:
DEFINE g_gen_attr DYNAMIC ARRAY OF RECORD
        gen01       STRING,
        gen02       STRING,
        gen03       STRING
END RECORD

記得要先做 g_gen_attr.clear()。

在 fill() 函數時 FOREACH 的時候判斷:
IF g_gen[g_cnt].gen03 IS NULL TEHN
    LET g_gen_attr[g_cnt].gen01 = 'MAGENTA REVERSE'
ELSE
    LET g_gen_attr[g_cnt].gen01 = ''
END IF

再來就是 DISPLAY ARRAY 顯示的時候依定義好的屬性來顯示:
BEFORE DISPLAY
         CALL cl_navigator_setting( g_curs_index, g_row_count )
         CALL DIALOG.setCellAttributes(g_gen_attr)    #加上這一句

沒有留言:

張貼留言