PB中Grid類型的數據窗口是用的最廣泛的一種類型,特點:創建快速,位置調整方便,運行后用戶也可以方便的調整列的寬度,列的位置, 運行效率也最高。
但是這個數據窗口類型的線條顏色是固定的,不能改變(可以通過API或者第三方控件修改內存數據改變) ,而且線條也不是很美觀,呵呵, 不少人對他的顏色不滿意。 如果想做出漂亮的報表PB提供另外一種數據窗口類型Tabular類型 ,線可以自己畫 ,線的顏色當然也是可以改變的 ,但是Tabular的缺點也是顯而易見的:畫線繁瑣,畫好線之后如果要修改其中的列,那么這個工作將是令人瘋狂的, 另外的列的寬度在運行后不能手動的拉寬,拉窄。
入正題! 找到一個既有表頭 ,又能改變線條顏色 ,又修改方便 ,又運行后能拉列寬。。。。 。 我的答案是: 建立Grid類型的數據窗口 ,程序運行后轉換成Tabular類型, 程序自動划線 ,然后程序控制鼠標拖動事件來拉寬,拉窄列 ,這樣並沒有改變程序中Grid的源代碼,這樣對程序中的修改,修改的都是原來的Grid類型 ,比較快捷 。
1. 新建Nvo nvo_Grid_Report ,實例變量 Left_Add //左側偏移量
2. 要對Grid進行列的拖動,必須要記錄各列的位置,以及畫出的線的位置 ,這樣在拖動是才能正確的移動列和線條的位置 ,新建四個DS 分別:
ids_Header //記錄Header的標題信息 ,主要: 對象名稱 ,x ,width ,對應的列的 ID 號 ,線的名稱
ids_Detail // 記錄Detail中的信息,也就是列和計算列. 主要: 對象名稱,x ,width ,ID ,線的名稱
Ids_ForeGround // 這個主要記錄多表頭的 ,因為多表頭的上表頭要設置成ForeGround 。 對象名稱 ,x ,對應列Id1 ,對應列ID2 (它是跨列),線名稱
ids_Summary // 匯總區 ,同ids_Detail
3. 新增函數 Of_Get_Objects 來獲取 dw中的信息,也就是填充上一步的4個ds 。 ids_Detail 中的id號其實就是明細中按照x排序后的一個順序號,記錄列的位置。 線的名稱就是將要畫的線的命名 。ids_Header的線就是標題(一個Text)右邊的一個豎線, ids_Detail中線也是列的右邊的豎線和列下方的橫行
4. 開始畫線
①. 首先獲取數據窗口Syntax , 替換其中的processing=1為processing=0
②. For i = 循環ids_Detail , 生成2個變量 ls_Lines (這個是需要Create的line的語法) ,ls_Modify(這個是需要在最后修改的列的x)
例如: = 10
ls_Lines += Line(豎線 x1 = x2 = 第十列.x + 第十列.width + Left_Add )(y1 = -4 ,y2 = Detail.Heigth + 4)(名稱,顏色)
ls_Lines += Line(橫線 x1 = 第十列.x + Left_Add , x2 = 第十列.x + Left_Add + 第十列.width) (y1 = y2 = Detail.height - 4)(名稱,顏色)
ls_Modify += 第十列列明 + “.x = ” + 第十列的x + Left+Add
然后去找第十列對應的標題 ,獲取標題對應的Lines 表達式 ,Modify表達式
然后去找第十列對應的Summary匯總, 如果有匯總區的話,不管有沒有找到第十列對應的匯總計算了, 那個線都是要畫的
然后去着第十列對應的Foreground對象,這個對象特殊,跨多列處理起來要復雜些,他的位置,以及線的寬度,都要特殊處理
③. 通過第二步已經把對應點列和線的位置生成的語法 。 這里還需要補幾個特殊的對象
1. Header 中標題上方的一條線 ,標題下方的一條線
2. 如果有Summary 那么這個里面也要畫一條下方的橫線
3. 對左側的一個堵口線
4. 在最右側列的右側 20像素除畫一個點 ,這個主要目的是能把最右側的線顯示出來,否則顯示不出來的
④. 如果有表頭 ,也要把語法創建進去,這里注意有表頭那么表頭區的線 和 標題的y都改變的,給表頭流出位置
⑤. 把lines的語法補到原始的Syntax 中 ,執行 dw_1.Create() , 再執行 dw_1.Modify(ls_Modify) 這樣已經把Grid數據窗口變成了一個Tabular風格
5. 處理列的移動
1. 在鼠標按下事件中判斷點中的對象是否是標題右側的線
2. 如果是標題右側的線,處理鼠標移動(鼠標點下沒彈起),基本原則是這樣的
1. 這條線屬於的標題 ,以及對應的列 ,匯總列的寬度都 改變 ,x不改變
2. 這條線后的所有對象 x + ,寬度寬度不變
3. 幾條固定的線,標題上下線,Summary中的線 x2 是要變的
6. 完成 大致效果是這樣的
原始Grid運行效果
變換后的效果
改變顏色后