本文介紹的方法和技巧都是筆者在實踐中的一點積累,在此拿出來與大家一起分享。希望在閱讀本文后會對您有所幫助或啟發。文中如有任何不足之處還望同行們給予指教。在此,我先道聲謝。 一、實現運行窗口居中 要實現窗口的自動居中,我們可以用函數Move()來實現。但是,由于我們開發出來的應用程序往往會在不同的設置環境中運行,雖然一般情況下是由我們為用戶配置好的,但我們總不能保證用戶顯示器的設置模式不會改變。所幸的是,PB為我們提供了環境對象Environment,該對象其實是一個系統結構,其中保存了PB應用程序的運行平臺信息,例如,代碼集,CPU類型等。其中當然會有我們需要的屏幕寬和高。為了得到該結構我們可以用函數GetEnvironment()。該函數的作用是得到關于操作系統,處理器和屏幕的系統信息。具體用法如下:
然后就可以用Move()來實現窗口居中。 (li_ScreenHeight - this.Height)/2 ) 二、數據窗口中實現字段的組合 現在假設客戶的省份,城市,地址,郵編分別存放在不同的字段中,它們是Province,City,Address,PC。我們要得到“郵編+省份+城市+地址”的格式,如:“(214001)江蘇省無錫市人民路1號。",具體實現如下: 1、在需要顯示的位置添加一個計算域(Compute Field) 2、在它的表達式欄中寫上“ '(' + PC + ' )' + Province + City + Address ” 3、單擊確定完成。 很容易是不是。需要提醒大家的是,計算域只能用來顯示,不能對它進行修改,因為它沒有TAB屬性,不能得到焦點。 三、數據窗口中的條碼顯示 四、數據窗口的自動刷新技術 我們還可以為應用程序添加閃爍報警的功能。就拿庫存量來說吧,最常用的是當某貨物的庫存量達到一個最低庫存量時程序應能自動判別,并用警告色顯示,通常是紅色。此時,我們只要在運用了上述的方法后再在需要閃爍的字段上,比如,庫存量,在它的顏色屬性中寫上相應的語句。下面這段代碼實現“當某一物品的庫存量小于20的時候,程序以紅色閃爍顯示警告” if ( Store_Num < 20, & if mod( Second(Now()), 2) <> 0, & // 每秒一次,偶數顯示紅色,奇數顯示白色,即底色 RGB(255, 255, 255), RGB(255, 0, 0) ) 五、數據窗口中實現自動折行 具體如下: 1、在數據窗口中選擇要自動折行的列Address。 2、選擇位置屬性(Position)并選中Autosize Height選項 3、 選擇編輯屬性(Edit)并去掉Auto Horz Scroll選項 4、選擇數據窗口中細目帶的屬性Autosize Height選項。注意,是當你拖動細目欄時出現的屬性。 設置完畢后在左下角預覽窗口中將顯示圖例的結果。 在進行列自動折行顯示的時候,還要注意一點,系統判斷自動折行的斷點是以空格或標點符號為依據的,如果我們輸入一長串字符且中間沒有任何標點符號或空隔的話,即使該字符串再長也無濟于事。因此,我們一定要提醒用戶在錄入時適當的加入一些空格或回車。 六、數據窗口中記錄顏色的隔層顯示 要想讓顯示的數據達到上述效果,我們首先要知道的是這些數據存放在數據窗口中的什么地方。很顯然,數據窗口中的所有數據是在細目帶中列出的,因此只要在細目帶中設置一些數據屬性就會影響到這個細目帶中的所有內容。具體實現如下: 1、打開數據窗口,單擊細目帶(Detail),注意是點擊有“Detail”字的一欄,不是它存放數據的地方。點擊它鼠標會出現上下小箭頭。 2、選擇常規屬性,單擊顏色屬性(Color)旁邊的一個帶有紅色圖標的小按鈕。 3、在表達式一欄中輸入 if ( Mod( GetRow(), 2) = 0, RGB(255, 255, 200), RGB(255, 255, 255)) // RGB(255, 255, 200),淺黃色 OK,預欄一下,效果不錯,大功告成。 七、實現數據窗口的動態排序 為了實現上述功能,程序首先需要用到一個全局變量(相對于PB來說可以用窗體變量),用它來控制連續兩次點擊之間的排序方向。因為字段的排序方向只有升序和降序兩種,所以我們可以用一個Boolean型。本例中是Boolean ib_flag。接著在數據窗口控件的Clicked事件中寫上如下代碼 /*****************************程序代碼******************************/ String ls_column, ls_sort ls_column = this.GetObjectAtPointer() // 得到鼠標按下位置的對象名 ls_column = left(ls_column, len(ls_column) - 2) // 得到列標題名字 if not Lower(right(ls_column, 2)) = "_t" then return // 如果不是缺省的列標題,即以“_t”結尾或鼠標根本沒有點在列標題上則退出 ls_column = left(ls_column, len(ls_column) - 2) // 去掉列標題末尾的“_t”,得到有效的列標題名 // 進行升序和降序的切換 if ib_flag then ls_sort = ls_column + " A" // 升序 else ls_sort = ls_column + " D" // 降序 end if ib_flag = not ib_flag // 為下一次排序準備 ls_sort = ls_sort this.setsort(ls_sort) this.sort() /*****************************結束******************************/ 注:這里所敘述的數據窗口中列的動態排序是以系統默認的列標題名為前提,即在標題欄中列標題名字是以“_t”結尾。 八、設置系統時間 本程序是通過調用外部函數SetSystemTime()實現系統時間的設置,該函數返回布爾型。查閱一下有關參考手冊就會發現該函數需要一個表示系統時間結構(Struct)的數據類型作為參數。此結構的定義如下:
要在程序中使用外部函數首先需要要進行外部函數聲明,可以根據函數的使用范圍放在全局外部函數聲明區或局部外部函數區聲明。具體聲明如下: Function Boolean SetSystemTime(str_SystemTime str_MyTime) Library "Kernel32.dll" 聲明之后就可以使用了。下面代碼實現將系統日期設置成“2000年8月10日”
注意,如果只有日期沒有時間的話系統會將時間設置成默認的上午8點整。設置系統的時間方法和設置日期類似,只要將結構中的時、分、秒分別設置成想要的就行了。具體實現請讀者自己完成。 至此,本文所講述的八個技巧到此結束。 |
溫馨提示:喜歡本站的話,請收藏一下本站!