狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

PowerBuilder超級技巧8則

PowerBuilder超級技巧8則

更新時間:2019-10-14 文章作者:未知 信息來源:網絡 閱讀次數:

本文介紹的方法和技巧都是筆者在實踐中的一點積累,在此拿出來與大家一起分享。希望在閱讀本文后會對您有所幫助或啟發。文中如有任何不足之處還望同行們給予指教。在此,我先道聲謝。

  一、實現運行窗口居中

  眾所周知,PowerBuilder 7.0在以前的版本中提供了圖形化的預覽工具,可以很方便的在設計階段實現窗口居中。但是,到了7.0似乎該項工具被取消了,也沒有什么屬性來設置,至少我沒有找到。每當我們需要將窗口居中的時候只有一點一點地調整它的X,Y值,這一點十分讓人頭痛。出于無奈,只好通過編程實現。我們只在每個需要居中的窗口的Open事件中寫上這些代碼就會實現窗口的自動居中。

  要實現窗口的自動居中,我們可以用函數Move()來實現。但是,由于我們開發出來的應用程序往往會在不同的設置環境中運行,雖然一般情況下是由我們為用戶配置好的,但我們總不能保證用戶顯示器的設置模式不會改變。所幸的是,PB為我們提供了環境對象Environment,該對象其實是一個系統結構,其中保存了PB應用程序的運行平臺信息,例如,代碼集,CPU類型等。其中當然會有我們需要的屏幕寬和高。為了得到該結構我們可以用函數GetEnvironment()。該函數的作用是得到關于操作系統,處理器和屏幕的系統信息。具體用法如下:

  Environment my_system

  Integer li_ScreenWidth, li_ScreenHeight

  GetEnvironment(my_system)

  // 得到屏幕的總寬度和長度

  li_ScreenWidth = PixelsToUnits(my_system.ScreenWidth, XPixelsToUnits!)

  li_ScreenHeight = PixelsToUnits(my_system.ScreenHeight, XPixelsToUnits!)

  // 函數PixelsToUnits()的作用是將屏幕的像數轉換成PowerBuilder使用的單位,因為像數通常不用于方形中,具體用法請參見函數手冊。

  然后就可以用Move()來實現窗口居中。

  This.Move((li_ScreenWidth - this.Width)/2, &

   (li_ScreenHeight - this.Height)/2 )

  二、數據窗口中實現字段的組合

  你有沒有碰到這樣的情況,我們輸入了客戶的詳細地址資料,包括省份,城市,地址,郵編。當我們要給客戶們郵寄信函時需要將他們的省份,城市,地址,郵編連成在一起打印出來。然而,這些信息是分開存儲的,即存在不同的字段。這時我們就可以利用PowerBuiler提供的在數據窗口添加計算域(Compute Field)來實現字符字段的組合顯示。

  現在假設客戶的省份,城市,地址,郵編分別存放在不同的字段中,它們是Province,City,Address,PC。我們要得到“郵編+省份+城市+地址”的格式,如:“(214001)江蘇省無錫市人民路1號。",具體實現如下:

  1、在需要顯示的位置添加一個計算域(Compute Field)

  2、在它的表達式欄中寫上“ '(' + PC + ' )' + Province + City + Address ”

  3、單擊確定完成。

  很容易是不是。需要提醒大家的是,計算域只能用來顯示,不能對它進行修改,因為它沒有TAB屬性,不能得到焦點。

  三、數據窗口中的條碼顯示

  在數據窗口中顯示條碼是不是很神秘?這對于沒有接觸過條碼的人來說也許是這樣。其實,它簡單的不能再簡單了。別忘了我們在寫文稿時是如何使文稿看上去更有藝術化。沒錯我們會給它用上各種字體。問題不就解決了嗎?條碼也是種字體,只不過我們看不懂罷了。我們只要將需要用條碼顯示的字段的字體換上相應的條碼字體就行了,比如,常用的3 of 9條碼字庫等。這些字體大多數是免費的,可以到網上去下載,然后安裝就行了。

  四、數據窗口的自動刷新技術

  在我們編寫諸如像庫存,銷售等應用系統時,總希望程序能動態的自動刷新庫存量或銷售量,比如說每隔1秒刷新一次。要實現這樣的功能只要我們利用數據窗口的時間間隔屬性(Timer Interval),當該值為0時數據窗口不進行刷新,如果要使數據窗口以每一秒鐘的頻率刷新的話,只要將該值設為1000,即1000毫秒。

  我們還可以為應用程序添加閃爍報警的功能。就拿庫存量來說吧,最常用的是當某貨物的庫存量達到一個最低庫存量時程序應能自動判別,并用警告色顯示,通常是紅色。此時,我們只要在運用了上述的方法后再在需要閃爍的字段上,比如,庫存量,在它的顏色屬性中寫上相應的語句。下面這段代碼實現“當某一物品的庫存量小于20的時候,程序以紅色閃爍顯示警告”

  if ( Store_Num < 20, &

  if mod( Second(Now()), 2) <> 0, & // 每秒一次,偶數顯示紅色,奇數顯示白色,即底色

  RGB(255, 255, 255), RGB(255, 0, 0) )

  五、數據窗口中實現自動折行

  有時為了界面的考慮需要將一些長字段折行顯示,但又不能確保在所有情況下都會出現長字段。比如,我們要求當客戶地址超過50個字符時將它分兩行顯示,對于沒滿50個字符的客戶仍然按照正常格式顯示。

  具體如下:

  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,預欄一下,效果不錯,大功告成。

  七、實現數據窗口的動態排序

  在用到Windows的資源管理器的時候,當我們需要按照文件的類型或名稱排序的時候只要用鼠標點擊一下相應的標題欄,系統會按照升序或降序交替排序,這完全取決于用戶鼠標點擊的奇偶數。如此方便的操作何不用到我們的數據窗口中——實現按某列的動態排序。

  為了實現上述功能,程序首先需要用到一個全局變量(相對于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)的數據類型作為參數。此結構的定義如下:

  struct _SYSTEMTIME {

    INT iYear;

    INT iMonth;

    INT iDayOfWeek;

    INT iDay;

    INT iHour;

    INT iMinute;

    INT iSecond;

    INT iMilliseconds; // 毫秒

  } str_SystemTime;

  要在程序中使用外部函數首先需要要進行外部函數聲明,可以根據函數的使用范圍放在全局外部函數聲明區或局部外部函數區聲明。具體聲明如下:

  Function Boolean SetSystemTime(str_SystemTime str_MyTime) Library "Kernel32.dll"

  聲明之后就可以使用了。下面代碼實現將系統日期設置成“2000年8月10日”

  /*****************************程序代碼******************************/

  str_SystemTime str_MyTime

  // 給結構賦值

  str_MyTime.iYear = 2000 // 2000年

  str_MyTime.imonth = 8 / /8月

  str_MyTime.iDay = 10 // 10日

  // 設置系統日期

  if SetSystemTime(ref str_MyTime)then

   Beep(1)

   MessageBox("提示","系統日期設置成功!")

  else

   Beep(1)

   MessageBox("提示","系統日期設置失敗!")

  end if

  /*****************************結束******************************/

  注意,如果只有日期沒有時間的話系統會將時間設置成默認的上午8點整。設置系統的時間方法和設置日期類似,只要將結構中的時、分、秒分別設置成想要的就行了。具體實現請讀者自己完成。

  至此,本文所講述的八個技巧到此結束。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
国产亚洲一区在线播放| 日韩欧美专区在线| 一本色道久久综合亚洲精品婷婷| 97久久精品人人澡人人爽| 成人激情黄色小说| 不卡电影免费在线播放一区| 国产精品系列在线播放| 国产一区二区剧情av在线| 九九国产精品视频| 国产精一区二区三区| 精品一区二区影视| 国产精品18久久久久久久久| 国产.精品.日韩.另类.中文.在线.播放 | 一区二区三区欧美日韩| 图片区小说区区亚洲影院| 亚洲一区二区偷拍精品| 亚洲永久免费视频| 天涯成人国产亚洲精品一区av| 亚洲观看高清完整版在线观看 | 国产精品一区在线观看乱码| 国产成人精品三级| 欧美久久一级| 先锋a资源在线看亚洲| 久久在线视频| 日韩精品一区二区在线| 中文一区一区三区高中清不卡| 一区在线播放视频| 日韩成人免费在线| 国产成人av一区二区三区在线| 91麻豆国产福利在线观看| 亚洲国产美女 | 亚洲日本欧美天堂| 日韩精品国产精品| 国产激情精品久久久第一区二区| 91丨porny丨在线| 亚洲一区免费| 91精品国产综合久久久蜜臀图片| 久久久国产综合精品女国产盗摄| 亚洲柠檬福利资源导航| 韩国精品主播一区二区在线观看| 91丨porny丨蝌蚪视频| 国产一区二区三区成人欧美日韩在线观看| 色94色欧美sute亚洲线路二| 欧美成人艳星乳罩| 亚洲综合免费观看高清在线观看| 精品在线观看视频| 亚洲二区视频| 3atv一区二区三区| 亚洲免费av高清| 国产盗摄一区二区三区| 亚洲精品久久久久久一区二区| 欧美调教femdomvk| 亚洲伦理在线免费看| 国产精品69毛片高清亚洲| 亚洲国产网站| 日韩欧美在线123| 亚洲成a天堂v人片| 欧美一区二区视频在线 | 亚洲欧洲精品天堂一级| 久久精品国产亚洲aⅴ| 好看的av在线不卡观看| 欧美日韩国产电影| 亚洲已满18点击进入久久| 国产黄色精品网站| 一本久久a久久精品亚洲| 中文字幕va一区二区三区| 国内成人精品2018免费看| 一区精品在线| 久久久99久久| 国产高清不卡二三区| 国产麻豆日韩| 国产精品福利影院| 亚洲一区二区三区免费观看| 久久av一区| 国产精品久线在线观看| 成人一区二区视频| 欧美伊人久久大香线蕉综合69| 亚洲欧美日韩中文播放| 91在线观看污| 日韩欧美国产1| 狠狠色狠狠色综合| 欧美va亚洲va香蕉在线| 亚洲狼人国产精品| 国内激情久久| 国产蜜臀av在线一区二区三区| 国产精品系列在线播放| 欧美日韩视频在线观看一区二区三区 | 精品免费99久久| 国产一区二区三区黄视频| 色视频欧美一区二区三区| 亚洲制服欧美中文字幕中文字幕| 国产一区二区三区自拍| 日本一区二区三区国色天香| 成人午夜激情影院| 日韩三级视频中文字幕| 国产一区欧美日韩| 3d动漫精品啪啪一区二区竹菊| 免费高清在线视频一区·| 久久婷婷av| 日韩影院免费视频| 在线观看国产一区二区| 奇米影视一区二区三区小说| 久久一区激情| 韩国av一区二区三区四区| 欧美日韩在线一区二区| 国内精品视频666| 日韩一级片网站| av中文一区二区三区| 2021久久国产精品不只是精品| 不卡大黄网站免费看| 国产欧美日韩视频一区二区| 91免费版在线看| 综合欧美一区二区三区| 国产乱人伦精品一区二区| 日本欧美一区二区三区| 制服丝袜成人动漫| 成人av集中营| 中文字幕一区二区视频| 亚洲伊人网站| 久久99热狠狠色一区二区| 欧美一区二区成人6969| 91网站最新地址| 日韩一区在线播放| 久久久噜噜噜| 国产酒店精品激情| 国产欧美中文在线| av成人天堂| 久久99久久久欧美国产| 欧美va在线播放| 亚洲日本视频| 精品一区二区免费| 国产网站一区二区| 久久国产精品久久精品国产| 久久er精品视频| 国产精品色一区二区三区| 久久久久国产精品一区三寸 | 一区二区三区四区国产| 激情欧美一区二区三区在线观看| 日韩免费一区二区三区在线播放| 欧美黄色免费| 欧美一区久久| 亚洲成av人片一区二区| 欧美一卡2卡三卡4卡5免费| 国产精品swag| 久久国产精品99久久久久久老狼 | 久久精品噜噜噜成人av农村| 久久亚洲私人国产精品va媚药| 精品成人免费| 国产精品一区二区久久不卡| 国产精品欧美极品| 欧美视频一区二区三区| 韩国自拍一区| 福利一区福利二区| 亚洲一区二区三区视频在线播放| 欧美一级xxx| 玖玖精品视频| 欧美区亚洲区| 国产成人一区在线| 亚洲第一成人在线| 久久奇米777| 欧美午夜精品一区| 雨宫琴音一区二区在线| 国产成人福利片| 国产成人精品1024| 日韩精品一二三| 蜜臀久久久99精品久久久久久| 日韩午夜av电影| 亚洲欧美日韩一区在线观看| 成人性视频网站| 午夜电影一区二区三区| 国产蜜臀av在线一区二区三区| 欧美亚洲另类激情小说| 一本色道久久综合亚洲精品高清 | 久久国产主播| 亚洲国产一区二区三区a毛片| 国产成都精品91一区二区三| 亚洲v精品v日韩v欧美v专区| 国产精品高潮久久久久无| 精品欧美久久久| 欧美伦理视频网站| 在线视频你懂得一区| 亚洲激情婷婷| 你懂的国产精品永久在线| 国产成人精品免费| 激情六月婷婷久久| 免费一区二区视频| 午夜不卡av免费| 亚洲一区二区三区美女| 国产亚洲欧美激情| 久久人人97超碰com| 日韩精品资源二区在线| 3d动漫精品啪啪| 欧美乱妇一区二区三区不卡视频| 久久综合中文色婷婷| 米奇777在线欧美播放| 亚洲精品婷婷| 国产精品免费一区二区三区在线观看| 影音先锋日韩资源| 国内精品久久久久久久果冻传媒| 欧美1区视频|