版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、resform技術(shù)資料匯編resform腳本語言基礎(chǔ)及其應(yīng)用(一)西安海卓石油信息技術(shù)有限公司前 言resform腳本語言是由西安海卓石油信息技術(shù)有限公司研制開發(fā),專門為該公司所發(fā)布的基于resform構(gòu)架的地質(zhì)工作室軟件產(chǎn)品(以下簡稱geooffice)配置的編程語言。利用resform腳本語言,可以通過編程方式實(shí)現(xiàn)對geooffice軟件產(chǎn)品常規(guī)功能的高度自動化操作,包括各種格式的地質(zhì)成果圖模板的自動生成、各種地質(zhì)參數(shù)的獲取和分析、geooffice軟件產(chǎn)品與其他流行辦公軟件的交互操作等等。 resform腳本語言面向該公司geooffice軟件產(chǎn)品的中高級用戶,為他們提供了一個通過編程方
2、式實(shí)現(xiàn)對geooffice軟件產(chǎn)品功能擴(kuò)展的有效手段。 geooffice軟件產(chǎn)品具有靈活實(shí)用、功能豐富、易于掌握的特點(diǎn),更為重要的是該軟件產(chǎn)品充分考慮了地質(zhì)人員的工作習(xí)慣。實(shí)際上,該軟件產(chǎn)品的作者本身就是石油地質(zhì)方面的專家,所以研制開發(fā)出的產(chǎn)品符合地質(zhì)人員的工作習(xí)慣是非常自然的。因?yàn)橛辛松鲜龅奶攸c(diǎn),geooffice軟件產(chǎn)品一經(jīng)推出,就在全國各大油田的相關(guān)行業(yè)中產(chǎn)生了較大的影響。目前,該軟件的用戶群正在不斷擴(kuò)大,并由此帶來了相關(guān)領(lǐng)域油田工作效率的明顯提高。與此同時在這個用戶群中還涌現(xiàn)出不少這樣的用戶,他們對計(jì)算機(jī)的了解比較深入,大都有過用某種計(jì)算機(jī)語言編程的經(jīng)驗(yàn),同時這些用戶對于geooff
3、ice軟件產(chǎn)品功能的掌握比一般用戶更為全面和深入,因此在他們希望能夠更多更好地掌握resform腳本語言,以解決地質(zhì)研究工作中更多更繁雜的問題。鑒于這種情況,公司決定除了在geooffice軟件產(chǎn)品的說明書中向用戶提供有關(guān)resform腳本語言基礎(chǔ)知識外,再面向geooffice軟件產(chǎn)品的中高級用戶提供一套更為詳盡的resform腳本語言應(yīng)用方面的教材。resform腳本語言可用應(yīng)用的領(lǐng)域很多,從單井資料的處理分析、油藏剖面相關(guān)數(shù)據(jù)的計(jì)算、一直到geooffice軟件產(chǎn)品針對的整個油田區(qū)塊相關(guān)地質(zhì)參數(shù)的提取,以這些參數(shù)的空間分布規(guī)律的研究等等,都可以是resform腳本語言的用武之地。本書主要
4、是關(guān)于resform腳本語言基礎(chǔ)方面的介紹,以及resform腳本語言在單井?dāng)?shù)據(jù)資料的處理和分析方面的部分應(yīng)用示例。有關(guān)更多應(yīng)用方面的介紹將在后續(xù)發(fā)布的有關(guān)專輯中進(jìn)行。書中列出的絕大部分實(shí)例來源于公司技術(shù)支持部門對于全國各油田用戶所提問題的實(shí)際解決方案,因而這些實(shí)例的針對性和實(shí)用性是顯而易見的。除此之外,其中有幾個解決方案具有行業(yè)內(nèi)通用的性質(zhì),關(guān)于這一點(diǎn)當(dāng)您在仔細(xì)閱讀每個示例時,當(dāng)會有切身的體驗(yàn)。本書的內(nèi)容分兩部分,第一部分是resform腳本語言基礎(chǔ)知識的介紹;第二部分是resform腳本語言在油田中應(yīng)用的初步介紹。本書假定讀者具有至少一種計(jì)算機(jī)編程語言的應(yīng)用經(jīng)驗(yàn)并且已經(jīng)熟悉西安海卓石油信息
5、技術(shù)有限公司發(fā)布的geooffice軟件產(chǎn)品的基本操作方法。在本書的編寫過程中,得到了全國各油田新老用戶的大力支持。其中特別要提到的是長慶油田的姜英昆、大慶油田的鄭建東、大港油田的陳長偉、青海油田的謝麗、中石油總院廊坊分院的張鳳敏、南陽油田的田云和華北油田的朱昌靈這幾位專家,由于他們的悉心指導(dǎo),使得參與該書寫作的人員得以對油田的地質(zhì)研究工作有了更加準(zhǔn)確地了解,這使得該書在實(shí)用性上有了很大的改進(jìn)。對此,西安海卓石油信息技術(shù)有限公司全體員工深表謝意!由于編者技術(shù)經(jīng)歷和專業(yè)水平所限,加之時間倉促,書中肯定有不少錯漏之處,敬請各位專家和讀者不吝指教。 西安海卓石油信息技術(shù)有限公司 2009年5月4日目
6、 錄第一篇 resform腳本語言基礎(chǔ)知識.4第一章 resform腳本語言入門.5第二章 resform用戶界面編程. 18第二篇 resform腳本語言應(yīng)用范例.86第一章 自動生成綜合錄井圖模板.87第二章 地層泥質(zhì)含量計(jì)算.95第三章 地層孔隙度計(jì)算.98第四章 地層滲透率計(jì)算.102第五章 地層含水飽和度計(jì)算.103第六章 地層巖性分析.108附錄. .125第一篇 resform腳本語言基礎(chǔ)這一部分介紹resform腳本語言的基礎(chǔ)知識,通過這部分的介紹您將能夠從了解resform腳本語言是什么開始,直到掌握利用resform腳本語言解決一些相對復(fù)雜的地質(zhì)問題。這部分給出的所有樣例代
7、碼,都是經(jīng)過認(rèn)真地斟酌后選定的,具有很強(qiáng)的針對性,對于理解書中介紹的知識是很有幫助的,請仔細(xì)閱讀。所有書中列出的樣例代碼都在geooffice軟件產(chǎn)品中調(diào)試通過,您也可以將書中列出的代碼錄入您的geooffice軟件產(chǎn)品的resform 腳本編輯器進(jìn)行練習(xí),這也對于加快學(xué)習(xí)的進(jìn)度也是很有好處的。第一章 resform腳本語言入門我們的討論從一個最簡單的例子開始。就個人的體驗(yàn)來講,通過幾個恰當(dāng)選擇的例子來理解一門編程語言是一種非常有效的途徑。當(dāng)然,為了開始順利地進(jìn)入角色,您得做些必要的準(zhǔn)備工作,第一要使geooffice軟件本身運(yùn)行起來。resform腳本置身于geooffice軟件中,是個寄生
8、的家伙,沒有g(shù)eooffice軟件的首先運(yùn)行它自己什么也做不了。geooffice軟件開始運(yùn)行的初始界面(圖 01)就象下面這個樣子?,F(xiàn)在,您該打開某個工作區(qū),有時您可能還得做些配置服務(wù)器或數(shù)據(jù)準(zhǔn)備等等諸如此類的工作。有關(guān)這一部分操作的詳細(xì)介紹,請參考隨每個geooffice產(chǎn)品發(fā)布的相關(guān)說明書。因?yàn)槲覀儸F(xiàn)在主要關(guān)注的是resform腳本語言基礎(chǔ)知識。而在后面的示例中主要是針對單井?dāng)?shù)據(jù)處理方面的,所以在上面的準(zhǔn)備工作做完之后,您得打開您想要用resform腳本語言進(jìn)行處理的某口井的測井或錄井的成果圖。至于resform腳本語言在geooffice軟件其它類別的項(xiàng)目,如剖面圖對象或某種類型平面圖
9、對象上的數(shù)據(jù)處理,其做法是大致相同的。有關(guān)這些方面的詳細(xì)討論將在以后其他的相關(guān)資料中介紹。(圖 01)準(zhǔn)備工作進(jìn)行到現(xiàn)階段應(yīng)該在屏幕上可以見到類似下面這樣的畫面了(圖 02)。請注意,在打開一個單井成果圖文件后,工具欄會出現(xiàn)“編輯/執(zhí)行宏”這樣一個命令按鈕?,F(xiàn)在好了嗎?如果沒有問題了,我們就繼續(xù)往下進(jìn)行。編輯/執(zhí)行宏(圖 02)現(xiàn)在單擊“編輯/執(zhí)行宏”按鈕,類似(圖03)這個樣子的界面顯示出來,我們所有的 resform腳本的編碼、調(diào)試和運(yùn)行都將在這里完成。中間那塊黑色的區(qū)域就是我們可以編輯代碼的地方。后面我們就叫它resform腳本語言編輯區(qū)吧,名不正則言不順,為了敘述起來方便,總得有個頭銜
10、才好。執(zhí)行(圖03)現(xiàn)在開始我們的第一個resform 腳本程序,請將下面用兩條虛線圍起來的所有內(nèi)容,敲入代碼編輯區(qū),點(diǎn)擊上面的(圖03)中標(biāo)出的“執(zhí)行”命令按鈕,感覺怎樣? /-/我們的第一個resform腳本程序void main()/-當(dāng)然感覺不是很好是嗎?這個程序啥也沒做,您應(yīng)該是沒有什么感覺的。但這確實(shí)是一個完整的resform腳本程序,可以正確地通過編譯和并可以正確地運(yùn)行。而且,這個程序包含了幾個重要的概念,這些概念對于我們從總體上掌握resform腳本語言是很有幫助的?,F(xiàn)在我們就來逐行地看一下上面的程序。第一行,是兩個注釋行,resform腳本語言規(guī)定用“/”標(biāo)記一個注釋行的開始
11、,程序在執(zhí)行時,注釋行被忽略,我們經(jīng)常用注釋行來對程序做一些注解,如說明程序的主要功能是什么,采用了哪些什么關(guān)鍵的算法,有些什么需要特別注意的問題等等,總之,注釋行里你可以寫上任何你想寫的東西,而且,一個注釋行可放在程序的任何地方,只要覺得有道理。第二行是resform 腳本程序的入口點(diǎn),是腳本真正開始做事的地方,也稱主函數(shù)頭。第三和第四行這個“”和“”符號對標(biāo)記的是一個稱作函數(shù)體的東西,通常我們所寫的我們用resform腳本語言寫的所有語句就放在這個函數(shù)體里。實(shí)際上,剛才所敘述的差不多就是整個resform腳本程序的樣子了,任何一個resform語言的腳本程序由main()主函數(shù)開始,后面緊
12、跟一對花括號,所有可執(zhí)行的語句都放在這對花括號界定的函數(shù)體里面。利用這個結(jié)構(gòu)差不多可以解決我們遇到的絕大多數(shù)的問題了。任何別的更加復(fù)雜的問題無非也就是對這樣一個結(jié)構(gòu)的不斷擴(kuò)充而已。/-void main()/干點(diǎn)什么事/-resform腳本語言編程差不多就是這樣了,如果記住了,就可以大膽地往前走了。 當(dāng)然,這擺活了半天啥也沒見著,確實(shí)有點(diǎn)說不過去。下面就舉個例子,干點(diǎn)什么事,至于怎么把這段代碼寫到resform代碼編輯區(qū),怎樣運(yùn)行這段代碼就不用再說了吧。/第二個例子,介紹一個常用行數(shù)messagebox(.)/-void main()messagebox.show(hello, world !
13、);/-運(yùn)行程序,現(xiàn)在,可以看見點(diǎn)東西了,是否多少有點(diǎn)成就感了呢?當(dāng)然,如果您想說的其實(shí)是這個老掉牙的例子,使您一下子想起了萬惡的舊社會的話,就保持沉默好了,“做人要厚道”。(圖04)這段小程序的真正的目的是想向您介紹一個在resform腳本程序中使用頻率極高的messagebox函數(shù)的,這在以后您也會會經(jīng)常要用到。比如說,我們在調(diào)試一個程序時,會經(jīng)常想知道,這個程序現(xiàn)在運(yùn)行到什么地方了?這對于我們在調(diào)試一個代碼較長又相對費(fèi)時的程序來說,尤其是這樣。做到這一點(diǎn)很容易,在您想停下來觀察的位置插入一個messagebox.show() 函數(shù)就好。在上面給出的是messagebox.show() 函
14、數(shù)最簡單的用法。messagebox.show()函數(shù)有好幾個不同的變體,以用于不同的場合,我不知道您將怎樣使用它,所以下面我根據(jù)自己的經(jīng)驗(yàn)選擇幾個可能對會更加常用的做個介紹,也好容您有個選擇余地。常用messagebox.show()函數(shù)的幾中不同形式:1. dialogresult messagebox.show( string text );功能 顯示具有指定文本的消息框。這種形式最簡單,也是前面我們用過的。參數(shù)說明text: 要在消息框中顯示的文本, 類型 string。 返回值:: dialogresult 值之一,類型:dialogresult。默認(rèn)情況下,消息框顯示一個“確定”按
15、鈕。2. dialogresult messagebox.show(string text, string caption);功能 顯示具有指定文本和標(biāo)題的消息框。參數(shù)說明text: 要在消息框中顯示的文本, 類型 string。 caption 要在消息框的標(biāo)題欄中顯示的文本,類型:string返回值:: dialogresult 值之一,類型:dialogresult。默認(rèn)情況下,消息框顯示一個“確定”按鈕。3. dialogresult messagebox.show( string text, string caption, messageboxbuttons buttons);功能顯
16、示具有指定文本、標(biāo)題和按鈕的消息框。參數(shù)說明text: 要在消息框中顯示的文本, 類型 string。 caption 要在消息框的標(biāo)題欄中顯示的文本,類型:stringbuttons messageboxbuttons 值之一,可指定在消息框中顯示哪些按鈕, 類型:messageboxbuttons返回值:: dialogresult 值之一,類型:dialogresult。dialogresult、messageboxbuttons和 string 數(shù)據(jù)類型:dialogresult 是一個枚舉,其實(shí)就是resform內(nèi)部定義好的一些整數(shù),對外是用字符表示的,這便于閱讀和記憶,resfor
17、m用這些整數(shù)標(biāo)識在對話框的操作中,用戶動了對話框的哪個按鈕或別的什么東西,然后根據(jù)用戶的操作返回一個相應(yīng)的值。至于這些整數(shù)等于3或是7就不管了吧,有道是多一事不如少一事,知道怎么用就好。下面就具體給出dialogresult可能的取值:none 從對話框返回了 dialogresult.nothing。這表明有模式對話框繼續(xù)運(yùn)行。ok 對話框的返回值是 dialogresult.ok(通常從標(biāo)簽為“確定”的按鈕發(fā)送, 即指示用戶按下了“確定”按鈕。cancel 對話框的返回值是 dialogresult.cancel(通常從標(biāo)簽為“取消”的按鈕發(fā)送, 即指示用戶按下了“取消”按鈕)。abort
18、 對話框的返回值是 abort(通常從標(biāo)簽為“中止”的按鈕發(fā)送)。retry 對話框的返回值是 retry(通常從標(biāo)簽為“重試”的按鈕發(fā)送)。ignore 對話框的返回值是 ignore(通常從標(biāo)簽為“忽略”的按鈕發(fā)送)。yes 對話框的返回值是 yes(通常從標(biāo)簽為“是”的按鈕發(fā)送)。no 對話框的返回值是 no(通常從標(biāo)簽為“否”的按鈕發(fā)送)。messageboxbuttons是一個枚舉,其實(shí)就是resform內(nèi)部定義好的一些整數(shù),用以定義 messagebox 上將顯示哪些按鈕。ok消息框包含“確定”按鈕。okcancel消息框包含“確定”和“取消”按鈕。abortretryignore
19、消息框包含“中止”、“重試”和“忽略”按鈕。yesnocancel消息框包含“是”、“否”和“取消”按鈕。yesno消息框包含“是”和“否”按鈕。retrycancel 消息框包含“重試”和“取消”按鈕。string resform腳本語言中的關(guān)鍵字之一,表示數(shù)據(jù)類型。string數(shù)據(jù)類型表示零個或更多unicode字符組成的序列。為了后面的討論更加方便,下面介紹在使用resform腳本語言編寫程序時,將會頻繁使用的幾個最基本的數(shù)據(jù)類型和在我們討論有關(guān)單井?dāng)?shù)據(jù)處理分析時將用的幾個關(guān)鍵函數(shù)。要說明的是,這里列出的數(shù)據(jù)類型是不全面的,主要是為了滿足我們在本書所討論問題的需要。有關(guān)resform腳本
20、語言中數(shù)據(jù)類型的全面介紹請參考相關(guān)的其他資料。其實(shí),如果您掌握了本書介紹的這幾個基本數(shù)據(jù)類型的相關(guān)知識,那么對與其它數(shù)據(jù)類型的用法也就掌握了。整型 int 關(guān)鍵字表示一種有符號 32 位整型數(shù)??杀硎?2,147,483,648 到 2,147,483,647范圍內(nèi)的任意整數(shù)??梢月暶鞑⒊跏蓟?int 類型的變量,例如:int i = 123;浮點(diǎn)型 float 關(guān)鍵字表示32 位浮點(diǎn)類型數(shù)??杀硎?1.510-45 到 3.41038范圍內(nèi)的任意實(shí)數(shù)。有7位精度??梢月暶鞑⒊跏蓟?float類型的變量,例如:float x = 3.5;雙精度型 double 關(guān)鍵字表示 64 位浮點(diǎn)型數(shù)。可
21、表示 5.010-324 到 1.710308范圍內(nèi)的任意實(shí)數(shù)。有15 到 16 位精度??梢月暶鞑⒊跏蓟痙ouble類型的變量,例如:double y = 4.9;object 類型,把它理解成是一個雜貨鋪?zhàn)雍昧?,您可以往里放任何東西,但您必須得記得怎么把它取出來。關(guān)于這個類型的具體用法您現(xiàn)在可以先不去管它,等到后面在我們具體用到時您看一下一個具體事例然后如法炮制就好。上面列出的是通用數(shù)據(jù)類型,下面列出resform腳本語言特有的部分?jǐn)?shù)據(jù)類型。圖列類型 swellcolumn 關(guān)鍵字表示resform腳本中的列類型數(shù)據(jù)對象。一個列對象可以存放一條或多條數(shù)據(jù)道也可以放一個channels,這跟
22、后面將提到的channels有點(diǎn)像,但swellcolumn 可直接提供對swelltrace布局的控制。通用圖道類型 swelltrace關(guān)鍵字表示resform腳本中的通用道類型數(shù)據(jù)對象。這是一個通用列類型,即該類型的變量可以存放任意數(shù)據(jù)到對象,如曲線道、巖性道或文本道等等。曲線道類型 scurvetrace關(guān)鍵字表示resform腳本中的曲線道數(shù)據(jù)對象。曲線道專用于表示具有等間隔采樣特征的一類數(shù)據(jù)序列。這類數(shù)據(jù)中,典型的如常規(guī)的電測曲線。離散道類型 sdiscretetrace 關(guān)鍵字表示resform腳本中的離散道數(shù)據(jù)對象。離散數(shù)據(jù)道專用于具有非等間隔采樣特征的一類數(shù)據(jù)序列。這類數(shù)據(jù)中
23、,比較典型的如巖樣的孔隙度、滲透率和流體飽和度的分析化驗(yàn)數(shù)據(jù)。文本道類型 stexttrace關(guān)鍵字表示resform腳本中的文本道數(shù)據(jù)對象。文本道可用于像巖性描述等類似的場合。巖性道類型 slithotrace關(guān)鍵字表示resform腳本中的巖性道數(shù)據(jù)對象。符號道類型 ssymbol 關(guān)鍵字表示resform腳本中的符號道數(shù)據(jù)對象。符號道可用于表達(dá)油氣顯示或在某個層位地層中見到的特定地層構(gòu)造,如某種層理,某種生物遺跡等等。地層單元道類型sstratiunittrace關(guān)鍵字表示resform腳本中的地層單元道數(shù)據(jù)對象。砂層組道類型 ssandset 關(guān)鍵字表示resform腳本中的砂層組道數(shù)
24、據(jù)對象。砂層道類型 ssandtrace關(guān)鍵字表示resform腳本中的砂層道數(shù)據(jù)對象。下面的部分是有關(guān)單井成果圖操作的幾個重要概念和核心函數(shù)。這里介紹的內(nèi)容對于滿足我們掌握resform腳本語言的目的而言,應(yīng)該是夠用的。this關(guān)鍵字 當(dāng)我們正在操作某個單井成果圖時,這個單井成果圖時就是this.以下函數(shù)獲取當(dāng)前成果圖上所有的數(shù)據(jù)道this.channels.gettraces();以下函數(shù)獲取當(dāng)前成果圖上所有的曲線數(shù)據(jù)道數(shù)據(jù)道this.channels.getcurvetraces();以下函數(shù)獲取當(dāng)前成果圖上所有的離散數(shù)據(jù)道this.channels.getdiscretetraces(
25、);以下函數(shù)獲取當(dāng)前成果圖上所有的巖性數(shù)據(jù)道this.channels.getlithotraces();以下函數(shù)獲取當(dāng)前成果圖上所有的地層單元數(shù)據(jù)道this.channels.getstratiunittraces();以下函數(shù)獲取當(dāng)前成果圖上所有的砂層組數(shù)據(jù)道this.channels.getsandsettraces();以下函數(shù)獲取當(dāng)前成果圖上所有的砂層數(shù)據(jù)道this.channels.getsandtraces();以下函數(shù)獲取當(dāng)前成果圖上所有的油層組數(shù)據(jù)道this.channels.getreservoirgrouptraces();以下函數(shù)獲取當(dāng)前成果圖上所有的產(chǎn)出剖面數(shù)據(jù)道th
26、is.channels.getproducingzonetraces();以下函數(shù)獲取當(dāng)前成果圖上所有的符號數(shù)據(jù)道this.channels.getsymboltraces();以下函數(shù)獲取當(dāng)前成果圖上所有的試油數(shù)據(jù)道this.channels.gettestoiltraces();以下函數(shù)獲取當(dāng)前成果圖上所有的射孔數(shù)據(jù)道this.channels.getperforationtraces();以下函數(shù)獲取當(dāng)前成果圖上所有的曲線數(shù)據(jù)道數(shù)據(jù)道this.channels.getcoringtraces();以下函數(shù)在當(dāng)前成果圖上建立一個新列swellcolumn this.channels.add
27、column(string title);其中,title 是列標(biāo)題以下函數(shù)在當(dāng)前成果圖上建立一個新道swelltrace this.channels.addtrace(welltracetypes type, string name);其中,type 是道類型。name 是道名稱。那么,channels是什么?一個忠告:最好不要招惹他,隨便他是什么,我們只要按上面所述可以在當(dāng)前成果圖上建立一個新列或新數(shù)據(jù)道就好。如果一定要說點(diǎn)什么,您就把一個channels看成是成果圖上按某種規(guī)格組合起來的數(shù)據(jù)道的集合好了。整個單井成果圖包含一個channels,這個channels含有成果圖上所有的數(shù)據(jù)道
28、。一個channels也可包含若干swellcolumn。上面也說過一個swellcolumn也可以包括一個channels。數(shù)據(jù)道則是像自然伽馬測井曲線或巖性道等等這樣的單個數(shù)據(jù)道對象。暈了吧,那就別想了。看看這些東西實(shí)際是怎么起作用的,就一切都明白了。現(xiàn)在就來舉幾個使用上述函數(shù)的示例。希望通過這幾個示例,您可以熟練掌握上述函數(shù)的用法。以下代碼生成一條曲線道,接名稱為”ac”,并設(shè)置其左右值分別為150和600/-void main()scurvetrace newtrace = this.channels.addtrace(welltracetypes.curve, ac);newtrac
29、e.left = 150;newtrace.right = 600;/-以下代碼在當(dāng)前成果圖上生成一個列對象,然后在該列中創(chuàng)建兩個曲線道,并設(shè)置它們的左右值/-void main()swellcolumn newcolumn = this.channels.addcolumn(newcolumn);newcolumn.horzarrange = false;scurvetrace newtrace1 = newcolumn.channels.addtrace(welltracetypes.curve, newtrace1);newtrace1.left = 150;newtrace1.righ
30、t = 600;scurvetrace newtrace2 = newcolumn.channels.addtrace(welltracetypes.curve, newtrace2);newtrace2.left = 0;newtrace2.right = 100;/-以下代碼是一個利用當(dāng)前成果圖上的自然伽馬測井曲線計(jì)算泥質(zhì)含量的簡單例子,其中引入了幾個新的概念,請注意代碼中的注釋。其中,this.cursor是尤其需要特別重視的一個新概念,后面會反復(fù)用到。其實(shí),this.cursor表示的就是成果圖上的當(dāng)前深度,有點(diǎn)像數(shù)據(jù)庫中游標(biāo)的概念。/-void main()scurvetrace v
31、 = this.channels.addtrace(welltracetypes.curve, vsh);v.left = 0;v.right = 100.0;/設(shè)置曲線顏色為紅色v.curvecolor = color.fromargb(255, 0, 0);/設(shè)置曲線寬度為3像素v.curvewdith = 3;/設(shè)置曲線線型為3實(shí)線v.curvestyle = pendashstyle.solid;/設(shè)置曲線填充方式為左充填v.fillmode = filllogcurvemode.left;/設(shè)置曲線填充圖案的前景色為暗紅色,背景色為桔紅色,填充圖案則為水平/短劃線v.fillbrus
32、h = new xbrush(colorref.darkred, colorref.orange, hatchstyle.dashedhorizontal);float d1, d2, m1, m2;d1 = 500; /開始深度d2 = 3400; /結(jié)束深度m1 = this.gr.left; /gr 最大值m2 = this.gr.right; /gr 最小值float c = 3.7; /地區(qū)經(jīng)驗(yàn)系數(shù)for(this.cursor = d1; this.cursor d2; this.cursor += 0.125) float val = (this.gr.value-m2)/(m1
33、-m2);v.value = 100 * (0.83 * val * val + 1.7 * val);/-這是一個某油田利用自己本地區(qū)經(jīng)驗(yàn)公式計(jì)算孔隙度的例子。這個油田的xx井巖心分析孔隙度與補(bǔ)償密度測井曲線相關(guān)性比較好,相關(guān)系數(shù)達(dá) r=0.8315, 可用下面的關(guān)系式計(jì)算:por = -63.1726 *den + 171.04,用此關(guān)系式計(jì)算孔隙度。/-void main()scurvetrace newtrace = this.channels.addtrace(welltracetypes.curve, por_den);newtrace.left = 0;newtrace.righ
34、t = 100;newtrace.curvecolor = color.fromargb(0, 127, 127);newtrace.curvewidth = 5;newtrace.curvestyle = pendashstyle.solid;newtrace.fillmode = filllogcurvemode.left;newtrace.fillbrush = new xbrush(color.darkred, color.brown, hatchstyle.dashedhorizontal);for(this.cursor = 500; this.cursor 3000; this.
35、cursor += 0.125)newtrace.value = -63.1726 * this.den.value + 171.04;/-再舉一個計(jì)算飽和度的簡單例子,來結(jié)束這一部分的討論。運(yùn)行這個程序需要成果圖上已存在名為“por_den”的孔隙度曲線道,如果現(xiàn)在還沒有,您可以先運(yùn)行前面那個程序得到它。此處飽和度的計(jì)算使用了阿爾奇公式so = 1- (a*b*rw)/(rt * porm)n其中,so地層含水飽和度;rw 地層水電阻率,rt 地層真電阻率;por 地層孔隙度;a = 0.8, b = 1.1467;m = 1.8701, n = 2.1025;/-void main()sc
36、urvetrace v = this.channels.addtrace(welltracetypes.curve,so_auto);v.left = 0;v.right = 100;v.curvecolor = color.fromargb(255, 0, 0);v.curvewith = 3;v.curvestyle = pendashstyle.solid;float a,b,m,n;a = 0.8, b = 1.1467;m = 1.8701, n = 2.1025;float rw,v1,v2;rw = 0.038;for( this.cursor = 500; this.curso
37、r 0) v1 = a * b * rw;v2 = this.rild.value * math.pow(this.por_den.value * 0.01, m);v.value = 100 * (1 - math.pow(v1/v2, 1/n);/-上面這幾個例子都非常簡單,主要目的是想提供一個大致的框架。在實(shí)際使用時您可根據(jù)實(shí)際要求修改那些代碼,以滿足您的需要。第二章 resform用戶界面編程前面是對resform腳本語言的一個入門性的介紹,下面討論resform腳本語言的用戶界面編程部分。對于一個實(shí)用的resform腳本程序來說,建立一個實(shí)際可以使用并且用戶友好的對話框是非常重要的。
38、實(shí)際上這一部分經(jīng)常是最為費(fèi)時和令人勞神的地方,在一些極端情況下,設(shè)計(jì)一個好用的對話框,有可能占到整個程序設(shè)計(jì)的百分之九十的代碼量。這部分可否省掉呢,大部分情況下不行,尤其當(dāng)您打算利用resform腳本語言開發(fā)一個想在多個地方都可以使用,而且還希望除了您自己之外,其他人甚至包括并不懂resform腳本語言的人也可以使用的一個resform腳本程序時,更是如此。這個道理非常明顯,我們將使用resform腳本語言來解決的問題,往往需要用戶進(jìn)行干預(yù),需要能夠根據(jù)具體用戶的實(shí)際需要行事,不同的用戶往往有不同的需求,既是對同一個用戶也有在不同時間和地點(diǎn)提出不同要求的時候,所以您就必須得給用戶選擇的便利。否
39、則,您寫的程序就不會有很好的適應(yīng)性,那直接的結(jié)果就是,這樣的程序注定沒有多長的壽命。當(dāng)然是有一個辦法解決這個問題,那就是由于resform腳本語言寫的程序都以源碼形式存在,由用戶根據(jù)實(shí)際情況修改源碼好了,這聽起來是很有道理的,而且在特定情況下對于特定的人群來講這也是不錯的個辦法,但如果您照著這個思路來開發(fā)resform腳本程序的話,這就很成問題,除非您寫的程序就您一個人用,那么您怎么寫,確實(shí)倒也無關(guān)緊要,解決當(dāng)前的問題就好。在有些時候,可能就是為了解決當(dāng)下的個別問題,而這類問題今后也許再也見不著了,那您就根本用不著花費(fèi)太多精力來考慮界面設(shè)計(jì)問題。如果不是這種情況,花些時間考慮如何創(chuàng)建一個好用的
40、用戶界面是有益的,有時設(shè)計(jì)一個好的用戶界面往往就成了您寫的程序成敗與否的決定性因素。好在利用resform腳本語言創(chuàng)建一個優(yōu)秀的用戶界面倒也并不是多難的事, 首先,resform腳本語言提供的工具是足夠您使用的, 其次,各種工具使用起來也非常靈活。但是您也確實(shí)需要花些時間來學(xué)習(xí)和了解。下面就來一步步地了解如何用resform 腳本語言來創(chuàng)建我們的用戶界面的問題,也就是建立一個合用的對話框的問題。第一節(jié) resform 腳本語言中的form控件在一個resform腳本程序中,我們設(shè)計(jì)的用戶界面絕大多是用在必須由用戶提供某些參數(shù)或做出某些選擇的場合,在這種場合下如果沒有提供這些參數(shù)或作出某些選擇腳
41、本程序?qū)⒉粦?yīng)該繼續(xù)往前運(yùn)行。因?yàn)檫@個時候,我們的腳本尚不清楚他的主人叫它做什么或如何做才好,所以只好等等再說。為滿足這樣的要求,我們用得著resform腳本語言中模態(tài)(modal)對話框或模態(tài)窗體的概念。一個模態(tài)對話框或模態(tài)窗體被設(shè)計(jì)成具有這樣的行為,即你必須先關(guān)閉或隱藏一個打開的模態(tài)對話框或模態(tài)窗體,才能繼續(xù)運(yùn)行腳本程序的其他部分。利用resform腳本語言提供的form對象所具有的相關(guān)特性來實(shí)現(xiàn)這樣一個模態(tài)窗體或?qū)υ捒蚴禽p而易舉的事。下面,我們將舉一個簡單的例子來示范如何用我們的resform腳本語言里創(chuàng)建這樣一個對話框或窗體。在這一章,我們將來認(rèn)識一下在用resform腳本語言建立一個用
42、戶界面時所必須用到的第一個角色。這個角色很基本,也很重要,因?yàn)槲覀冊趓esform腳本語言中創(chuàng)建的所有用戶界面將由此而生,也由此而滅。這個角色就是form,后面我們叫它為窗體,至于我們將討論的一個個用戶界面就叫對話框好了,這樣更通俗些。form 是應(yīng)用程序中所顯示的任何窗口的表示形式,是構(gòu)成一個對話框的所有其它零部件的容器,所有其它的零部件都寄宿于form,后面我們稱這些零部件為控件。form有很多的屬性,使用 form 中可用的屬性,您可以確定所創(chuàng)建窗口或?qū)υ捒虻耐庥^、大小、顏色和窗口管理功能。對我們來講常用的屬性有下面幾個:text 您用這個屬性在標(biāo)題欄中指定窗口的標(biāo)題。size 您用這個
43、屬性定義窗口在顯示時的大小。desktoplocation 您用這個屬性定義窗口在顯示時的大小和位置。forecolor 顏色屬性 您用這個屬性更改窗體上放置的所有控件的默認(rèn)前景色。 formborderstyle、minimizebox 和 maximizebox 利用這幾個屬性允許您可以控制運(yùn)行時窗體是否可以最小化、最大化或調(diào)整窗體大小。form有很多的方法,您可以使用它的方法來操作窗體。例如,對我們而言最重要莫過于showdialog 方法, resform腳本語言中就是使用 showdialog 方法來將對話框在屏幕上顯示出來的。另外一個常用的方法是 setdesktoplocatio
44、n,可以使用setdesktoplocation方法在桌面上定位窗體。form 中還有事件的概念,事件允許您響應(yīng)對窗體執(zhí)行的操作。關(guān)于這一部分將在后面介紹button控件時再做介紹。下面具體創(chuàng)建一個 form 的實(shí)例,看看到底是什么樣子。該示例設(shè)置了form 的text 、size 、 formborderstyle、minimizebox、maximizebox 和 startposition 屬性。您可以自己試驗(yàn)一下,當(dāng)給這些屬性以不同值時,其效果是怎樣的。/-void main()/建立一個form. form myfirstform = new form(); /設(shè)置form 的 te
45、xt myfirstform.text = 我的第一個窗體; /設(shè)置form 的 邊框?qū)傩裕╢ormborderstyle). myfirstform.formborderstyle = formborderstyle.fixeddialog; /設(shè)置form 的 最大化控制框?qū)傩裕╩aximizebox)./當(dāng)最大化按鈕屬性值為假(false)時,窗體的標(biāo)題欄中將不顯示最大化控制框myfirstform.maximizebox = false; /設(shè)置form 的 最小化控制框?qū)傩裕╩inimizebox)./當(dāng)最小化按鈕屬性值為假(false)時,窗體的標(biāo)題欄中將不顯示最小化控制框myfi
46、rstform.minimizebox = false; /設(shè)置form 的初始位置屬性(startposition).使窗體顯示在屏幕中央myfirstform.startposition = formstartposition.centerscreen;/設(shè)置窗體大小myfirstform.size = new size(360,200); / 顯示我們創(chuàng)建的窗體(對話框). myfirstform.showdialog();/-運(yùn)行上面的腳本,創(chuàng)建出來的窗體是下面這個樣子,感覺怎樣?好象不是太有趣,別急這剛剛開始,從這出發(fā),我們將會一步步創(chuàng)造出我們想要的功能豐富的用戶界面。在接下來的討論
47、中上面那段代碼將被反復(fù)使用,請一定掌握。 (圖05)第二節(jié) button, label和text控件這一部分我們介紹在resform腳本語言界面編程中,三個最常用、也是最簡單的控件。可不要小瞧這三個控件,實(shí)際上,有了這三個控件再加上前一章介紹的form,我們就可解決resform腳本語言界面編程中相當(dāng)大量的問題,下面我們就來逐個認(rèn)識它們。resform腳本語言中的button控件button 控件允許用戶通過單擊來執(zhí)行操作。button 控件既可以顯示文本,又可以顯示圖像。當(dāng)該按鈕被單擊時,它看起來像是被按下,然后被釋放。每當(dāng)用戶單擊按鈕時,即調(diào)用 click 事件處理程序??蓪⒋a放入 click 事件處理程序來執(zhí)行所選擇的任意操作。按鈕上顯示的文本包含在 text 屬性中。文本的外觀受 font 屬性和 textalign 屬性控制。如果文本超出按鈕寬度,則換到下一行。但是,如果控件無法容納文本的總體高度,則將剪裁文本。text 屬性可以包含訪問鍵,允許用戶通過同時按 alt 鍵和訪問鍵來“單擊”控件。button 控件還可以使用 image 和 imagelist 屬性顯示圖像。有關(guān)這一部分就其作用而言只是可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 胎記的臨床護(hù)理
- 兒童學(xué)習(xí)能力障礙的健康宣教
- 《機(jī)械制造基礎(chǔ)》課件-05篇 第八單元 超精密加工
- 《機(jī)械設(shè)計(jì)基礎(chǔ)》課件-第5章
- 《計(jì)算機(jī)表格處理》課件
- 【培訓(xùn)課件】青果園 萬名大學(xué)生創(chuàng)意創(chuàng)業(yè)園區(qū)項(xiàng)目介紹
- 《認(rèn)識HS商品分類》課件
- 社區(qū)戶外旅游組織計(jì)劃
- 生物學(xué)課程的擴(kuò)展與拓展計(jì)劃
- 提升師生互動頻率的計(jì)劃
- 碳酸丙烯脂吸收二氧化碳
- 關(guān)于區(qū)人民法院立案工作情況的調(diào)研報告
- 高放廢物深地質(zhì)處置
- 關(guān)于《公交都市考核評價指標(biāo)體系》的說明
- 食堂防火、防毒、防盜“三防”措施方案
- 機(jī)械零件測繪
- 護(hù)理質(zhì)量持續(xù)改進(jìn)記錄.doc
- 中國詩詞大會第一季全部詩詞
- 第七章金融遠(yuǎn)期、期貨和互換案例
- 最新安全日志范本
- 工程量計(jì)算表.doc
評論
0/150
提交評論