Mapinfo教學(xué)課件10第十章過(guò)程、自定義函數(shù)_第1頁(yè)
Mapinfo教學(xué)課件10第十章過(guò)程、自定義函數(shù)_第2頁(yè)
Mapinfo教學(xué)課件10第十章過(guò)程、自定義函數(shù)_第3頁(yè)
Mapinfo教學(xué)課件10第十章過(guò)程、自定義函數(shù)_第4頁(yè)
Mapinfo教學(xué)課件10第十章過(guò)程、自定義函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第十章過(guò)程、自定義函數(shù)第一節(jié)過(guò)程第二節(jié)自定義函數(shù)第十章過(guò)程、自定義函數(shù)11.1過(guò)程MapBasic的過(guò)程包含主過(guò)程和子過(guò)程,是MapBasic程序結(jié)構(gòu)中的一個(gè)不可缺少的部分。一個(gè)典型的MapBasic程序由許多過(guò)程組成,每個(gè)過(guò)程包含一組完成某一特定任務(wù)的語(yǔ)句。1.1過(guò)程MapBasic的過(guò)程包含主過(guò)程和子過(guò)程,是M21.2過(guò)程定義創(chuàng)建一個(gè)過(guò)程的一般形式為Sub過(guò)程名[(ByVal)]參數(shù)名As變量類型[,…])]語(yǔ)句列表EndSubSub…EndSub結(jié)構(gòu)定義了一個(gè)子過(guò)程(通常簡(jiǎn)稱為過(guò)程).過(guò)程一旦定義,程序的其他部分可以使用Call語(yǔ)句調(diào)用該過(guò)程.1.2過(guò)程定義創(chuàng)建一個(gè)過(guò)程的一般形式為31.2過(guò)程定義一個(gè)過(guò)程可以不帶參數(shù)也可以帶多個(gè)參數(shù).當(dāng)一個(gè)過(guò)程帶有參數(shù)時(shí),它的每一個(gè)參數(shù)必須是唯一的.當(dāng)參數(shù)不止一個(gè)時(shí),參數(shù)必須用逗號(hào)隔開.形式參數(shù)在缺省情況下,MapBasic的參數(shù)為形式參數(shù),當(dāng)過(guò)程帶有形式參數(shù)時(shí),調(diào)用者必須將該形式參數(shù)指定一個(gè)特定變量.在調(diào)用過(guò)程中,如果過(guò)程執(zhí)行中改變了形式參數(shù)的值,則指定變量的值隨之改變,即過(guò)程可以通過(guò)形式參數(shù)把值隨之改變,即過(guò)程可以通過(guò)形式參數(shù)把值返回給調(diào)用者,從而允許調(diào)用者檢查子過(guò)程返回的值.1.2過(guò)程定義一個(gè)過(guò)程可以不帶參數(shù)也可以帶多個(gè)參數(shù).當(dāng)41.2過(guò)程定義值參數(shù)MapBasic還提供另一類型的參數(shù),即通常所稱的值參數(shù)。在過(guò)程定義中,值參數(shù)名稱前有ByVal關(guān)鍵詞,當(dāng)一個(gè)參數(shù)是以值參數(shù)方式傳遞時(shí),子過(guò)程通過(guò)調(diào)用者的表達(dá)式得到一個(gè)表達(dá)式值的復(fù)制品,這樣,調(diào)用者可以使用任何表達(dá)式,而不必像形式參數(shù)那樣必須使用變量來(lái)傳遞參數(shù)的值,而且子過(guò)程可以改變值參數(shù)的值但不會(huì)對(duì)調(diào)用者提供的變量或表達(dá)式造成任何影響,即子過(guò)程不能通過(guò)值參數(shù)把一個(gè)值返回給調(diào)用者,這是值參數(shù)和形式參數(shù)最大的區(qū)別。1.2過(guò)程定義值參數(shù)51.2過(guò)程定義數(shù)組參數(shù)子過(guò)程的參數(shù)還可以是一個(gè)數(shù)組,要聲明子過(guò)程的參數(shù)為數(shù)組,在Sub…EndSub結(jié)構(gòu)的參數(shù)名后面加上一對(duì)圓括號(hào)即可,如下的例子定義了一個(gè)帶有整數(shù)數(shù)組作為形式參數(shù)的子過(guò)程:SubExample(XAsInteger)……EndSub當(dāng)調(diào)用一個(gè)帶數(shù)組參數(shù)的子過(guò)程時(shí),調(diào)用者只需在調(diào)用語(yǔ)句中指定傳遞值的數(shù)組名即可,而不必在后面加上圓括號(hào),如調(diào)用上例的Example子過(guò)程,可以使用以下語(yǔ)句:CallExample(items)其中,items是為形式參數(shù)指定特定值的數(shù)組,從中可見items后面不用帶圓括號(hào).1.2過(guò)程定義數(shù)組參數(shù)61.2過(guò)程定義以上說(shuō)明了如何定義一個(gè)過(guò)程,但在定義一個(gè)過(guò)程之前必須先對(duì)付過(guò)程進(jìn)行聲明,這需要使用DeclareSub語(yǔ)句,其一般形式為:DeclareSub過(guò)程名[([ByVal])參數(shù)名As變量類型[,…])]DeclareSub語(yǔ)句建立了一個(gè)過(guò)程名和參數(shù)列表,在通常情況下,每一個(gè)DeclareSub語(yǔ)句對(duì)應(yīng)一個(gè)真正的子過(guò)程,該子過(guò)程隨后在程序的Sub…EndSub結(jié)構(gòu)中定義1.2過(guò)程定義以上說(shuō)明了如何定義一個(gè)過(guò)程,但在定義一個(gè)過(guò)71.2過(guò)程定義DeclareSub語(yǔ)句還可以定義一個(gè)用其他語(yǔ)言(如C或者Pascal)編寫的外部程序,一旦聲明了一個(gè)外部程序,原程序可以像調(diào)用常規(guī)的MapBasic子過(guò)程一樣調(diào)用該外部程序。聲明一個(gè)外部程序的一般形式如下所示:DeclareSub過(guò)程名Lib“文件名”[Alias“外部程序初始名”][([ByVal])參數(shù)名As變量類型[,…])]調(diào)用一個(gè)外部程序與所使用的平臺(tái)相關(guān),在Windows中,外部程序可以存儲(chǔ)在Dll文件中,在Macintosh中,外部程序已XCMD形式存在,但不管操作平臺(tái)如何,DeclareSub語(yǔ)句的語(yǔ)法在本質(zhì)上是一樣的,1.2過(guò)程定義DeclareSub語(yǔ)句還可以定義一個(gè)81.2過(guò)程定義如果子過(guò)程帶有的局部變量與已存在的全局變量同名,任何對(duì)該變量的操作都只影響子過(guò)程中的局部變量,即子過(guò)程的局部變量使同名的全局變量不起作用此外,還需要注意的是編程人員不能將數(shù)組、用戶型變量以及Alias變量傳遞給值參數(shù),但可以將任何類型的變量傳遞給形式參數(shù)1.2過(guò)程定義如果子過(guò)程帶有的局部變量與已存在的全局變量91.3主過(guò)程主過(guò)程是MapBasic程序中必須包含的過(guò)程,是應(yīng)用程序運(yùn)行時(shí)第一個(gè)調(diào)用的過(guò)程,其他的子過(guò)程都必須通過(guò)主過(guò)程或其他子過(guò)程來(lái)調(diào)用,定義一個(gè)主過(guò)程的一般形式如下:DeclareSubMainSubMain語(yǔ)句列表EndSubMain是一個(gè)特殊的MapBasic過(guò)程名,如果應(yīng)用程序中包含一個(gè)名為Main的過(guò)程,當(dāng)運(yùn)行該應(yīng)用程序時(shí),Mapinfo將自動(dòng)先執(zhí)行Main過(guò)程。然而,程序員也可以不明確地定義主過(guò)程,而在程序的開頭附近寫入一句或幾句簡(jiǎn)單的語(yǔ)句,但這些語(yǔ)句必須在任何過(guò)程之外,MapBasic將把這些語(yǔ)句看成是一個(gè)主過(guò)程,這被成為一個(gè)隱含的主過(guò)程1.3主過(guò)程主過(guò)程是MapBasic程序中必須包含的101.4過(guò)程調(diào)用過(guò)程或外部程序(DLL,XCMD)的調(diào)用使用Call語(yǔ)句,其一般形式為:Call子過(guò)程名[([參數(shù)名][,…])]Call語(yǔ)句可以調(diào)用由Sub…End定義的常規(guī)的子過(guò)程,也可以調(diào)用Windows動(dòng)態(tài)鏈接庫(kù)的程序(Dll),但這時(shí)必須是在MapinfoforWindows中運(yùn)行該應(yīng)用程序,類似地,當(dāng)應(yīng)用程序在MapinfoforMacintosh中運(yùn)行時(shí),Call語(yǔ)句可以調(diào)用XCMD外部程序1.4過(guò)程調(diào)用過(guò)程或外部程序(DLL,XCMD)的調(diào)用111.4過(guò)程調(diào)用當(dāng)Call語(yǔ)句調(diào)用一個(gè)常規(guī)MapBasic過(guò)程時(shí),MapBasic將跳去執(zhí)行在子過(guò)程中語(yǔ)句,直到遇到EndSub語(yǔ)句,此時(shí),MapBasic從子程序中返回,并繼續(xù)執(zhí)行Call語(yǔ)句后面的語(yǔ)句,值得注意的是,此時(shí)Call語(yǔ)句只能調(diào)用同一應(yīng)用程序里面定義的子過(guò)程當(dāng)Call語(yǔ)句調(diào)用的是外部程序時(shí),MapBasic轉(zhuǎn)向執(zhí)行指定的外部程序直到該外部程序返回,對(duì)于WindowsDll外部程序?qū)嶋H是位于一個(gè)獨(dú)立的文件中,因此該指定的Dll文件在MapBasic運(yùn)行Call語(yǔ)句時(shí)必須存在而且可以獲得;對(duì)于XCMD文件情況類似,但調(diào)用XCMD時(shí),數(shù)組變量和用戶類型變量不能作為參數(shù)1.4過(guò)程調(diào)用當(dāng)Call語(yǔ)句調(diào)用一個(gè)常規(guī)MapBasi12例DeclareSubMainDecareSubCube(ByValoriginalAsFloat,cubedasFloat)SubMainDimx,resultAsFloatCallCube(2,result)‘resultnowcontainsthevalue2*2*2=8x=1CallCube(x+2,result)‘resultnowcontainsthevalue3*3*3=27EndSubSubCube(byvaloriginalAsFloat,cubedAsFloat)cubed=original^3EndSub例131.5事件處理程序在圖形用戶界面環(huán)境中,用戶通過(guò)鍵盤或鼠標(biāo)控制事件的發(fā)生,這些單擊鼠標(biāo)或其他由用戶發(fā)出的動(dòng)作稱為事件或系統(tǒng)事件,而事件處理程序是為了響應(yīng)系統(tǒng)事件的MapBasic程序的一部分,當(dāng)用戶產(chǎn)生一個(gè)事件時(shí),應(yīng)用程序必須通過(guò)事件處理程序?qū)Υ俗鞒鲰憫?yīng)在MapBasic中,子過(guò)程可以作為事件處理程序,MapBasic有許多特殊的過(guò)程,如SelChangedHander、WinClosedHander、RemoteMsgHandler、ToolHandler、EndHandler等,它們?cè)贛apBasic程序中具有重要作用,此外用戶還可以建立自己的子過(guò)程作為事件處理程序每一個(gè)事件處理程序必須有一個(gè)特殊的名字在一般情況下,用戶不需要使用Call語(yǔ)句去專門調(diào)用以上的特殊過(guò)程,如果MapBasic應(yīng)用程序中包含以上過(guò)程,當(dāng)某一類型的系統(tǒng)事件發(fā)生時(shí),MapBasic將會(huì)自動(dòng)調(diào)用相應(yīng)的過(guò)程。例如假設(shè)程序中有一個(gè)名為WinCloseHandler的過(guò)程,每當(dāng)用戶關(guān)閉一個(gè)窗口時(shí),MapBasic會(huì)自動(dòng)調(diào)用該過(guò)程1.5事件處理程序在圖形用戶界面環(huán)境中,用戶通過(guò)鍵盤或142.1自定義函數(shù)MapBasic支持多種不同的函數(shù),包括標(biāo)準(zhǔn)的Basic函數(shù)(例如Asc()、Format$()等)和Mapinfo或MapBasic特有的函數(shù)(例如,Distance()、ObjectGeography()).此外,用戶還可以在MapBasic自定義函數(shù),一旦定義了一個(gè)用戶自定義函數(shù),就可以像MapBasic標(biāo)準(zhǔn)函數(shù)一樣調(diào)用它2.1自定義函數(shù)MapBasic支持多種不同的函數(shù),包152.2函數(shù)的聲明要自定義函數(shù),首先必須對(duì)函數(shù)返回值和參數(shù)列表進(jìn)行定義,即函數(shù)的聲明。自定義函數(shù)的聲明,在MapBasic中采用Declare語(yǔ)句.一般地,Declare語(yǔ)句的基本語(yǔ)法如下:DeclareFunctionfname([[ByVal]parameterAsvar_type][,[ByVal]parameterAsvar_type…])Asreturn_typefname是函數(shù)名parameter是該函數(shù)的參數(shù)名var_type是變量類型,例如整數(shù)型return_type是一個(gè)標(biāo)準(zhǔn)變量類型,即函數(shù)的返回值,數(shù)組和自定義類型不被承認(rèn)2.2函數(shù)的聲明要自定義函數(shù),首先必須對(duì)函數(shù)返回值和參162.2函數(shù)的聲明例DeclareSubMainDeclareFunctionCubeRoot(ByValxAsFloat)AsFloatSubMainNoteStr$(CubeRoot(23))End2.2函數(shù)的聲明例172.3函數(shù)的定義用戶自定義函數(shù)是用Function…EndFunction結(jié)構(gòu)來(lái)定義的,其語(yǔ)法如下:Functionname([[ByVal]parameterAsdatatype][,[ByVal]parameterAsdatatype…])Asreturn_typestatement_listEndFuntionname是函數(shù)名paremeter是該函數(shù)中的參數(shù)名datatype是變量類型,例如整數(shù)型return_type是標(biāo)準(zhǔn)變量類型而數(shù)組和自定義類型不被承認(rèn)statement_list是將要執(zhí)行的函數(shù)中用到的語(yǔ)句列表2.3函數(shù)的定義用戶自定義函數(shù)是用Function…182.3函數(shù)的定義例自定義函數(shù)CubeRoot,它返回一個(gè)數(shù)值的立方根(這個(gè)數(shù)字的1/3次方)DeclareFunctionCubeRoot(ByValxAsFloat)AsFloatDeclareSubMainSubMainDimf_resultAsFloatf_result=CubeRoot(23)NoteStr$(f_result)EndSubFunctionCubeRoot(ByValxAsFloat)AsFloatCubeRoot=x^0.33333333333EndFunction2.3函數(shù)的定義例自定義函數(shù)CubeRoot,它返192.5退出用戶函數(shù)如果要退出一個(gè)Function…EndFunction結(jié)構(gòu),可以采用ExitFunction語(yǔ)句.ExitFunction語(yǔ)句可以使MapBasic退出當(dāng)前函數(shù),因此,ExitFunction語(yǔ)句只能在Function…EndFunction語(yǔ)句中定義使用函數(shù)是可以嵌套使用的。一個(gè)函數(shù)中可以調(diào)用另一個(gè)函數(shù),同樣,被調(diào)用的函數(shù)還可以繼續(xù)調(diào)用其它函數(shù),一個(gè)單獨(dú)的ExitFunction語(yǔ)句只能退出當(dāng)前的函數(shù)2.5退出用戶函數(shù)如果要退出一個(gè)Function…En20第十章過(guò)程、自定義函數(shù)第一節(jié)過(guò)程第二節(jié)自定義函數(shù)第十章過(guò)程、自定義函數(shù)211.1過(guò)程MapBasic的過(guò)程包含主過(guò)程和子過(guò)程,是MapBasic程序結(jié)構(gòu)中的一個(gè)不可缺少的部分。一個(gè)典型的MapBasic程序由許多過(guò)程組成,每個(gè)過(guò)程包含一組完成某一特定任務(wù)的語(yǔ)句。1.1過(guò)程MapBasic的過(guò)程包含主過(guò)程和子過(guò)程,是M221.2過(guò)程定義創(chuàng)建一個(gè)過(guò)程的一般形式為Sub過(guò)程名[(ByVal)]參數(shù)名As變量類型[,…])]語(yǔ)句列表EndSubSub…EndSub結(jié)構(gòu)定義了一個(gè)子過(guò)程(通常簡(jiǎn)稱為過(guò)程).過(guò)程一旦定義,程序的其他部分可以使用Call語(yǔ)句調(diào)用該過(guò)程.1.2過(guò)程定義創(chuàng)建一個(gè)過(guò)程的一般形式為231.2過(guò)程定義一個(gè)過(guò)程可以不帶參數(shù)也可以帶多個(gè)參數(shù).當(dāng)一個(gè)過(guò)程帶有參數(shù)時(shí),它的每一個(gè)參數(shù)必須是唯一的.當(dāng)參數(shù)不止一個(gè)時(shí),參數(shù)必須用逗號(hào)隔開.形式參數(shù)在缺省情況下,MapBasic的參數(shù)為形式參數(shù),當(dāng)過(guò)程帶有形式參數(shù)時(shí),調(diào)用者必須將該形式參數(shù)指定一個(gè)特定變量.在調(diào)用過(guò)程中,如果過(guò)程執(zhí)行中改變了形式參數(shù)的值,則指定變量的值隨之改變,即過(guò)程可以通過(guò)形式參數(shù)把值隨之改變,即過(guò)程可以通過(guò)形式參數(shù)把值返回給調(diào)用者,從而允許調(diào)用者檢查子過(guò)程返回的值.1.2過(guò)程定義一個(gè)過(guò)程可以不帶參數(shù)也可以帶多個(gè)參數(shù).當(dāng)241.2過(guò)程定義值參數(shù)MapBasic還提供另一類型的參數(shù),即通常所稱的值參數(shù)。在過(guò)程定義中,值參數(shù)名稱前有ByVal關(guān)鍵詞,當(dāng)一個(gè)參數(shù)是以值參數(shù)方式傳遞時(shí),子過(guò)程通過(guò)調(diào)用者的表達(dá)式得到一個(gè)表達(dá)式值的復(fù)制品,這樣,調(diào)用者可以使用任何表達(dá)式,而不必像形式參數(shù)那樣必須使用變量來(lái)傳遞參數(shù)的值,而且子過(guò)程可以改變值參數(shù)的值但不會(huì)對(duì)調(diào)用者提供的變量或表達(dá)式造成任何影響,即子過(guò)程不能通過(guò)值參數(shù)把一個(gè)值返回給調(diào)用者,這是值參數(shù)和形式參數(shù)最大的區(qū)別。1.2過(guò)程定義值參數(shù)251.2過(guò)程定義數(shù)組參數(shù)子過(guò)程的參數(shù)還可以是一個(gè)數(shù)組,要聲明子過(guò)程的參數(shù)為數(shù)組,在Sub…EndSub結(jié)構(gòu)的參數(shù)名后面加上一對(duì)圓括號(hào)即可,如下的例子定義了一個(gè)帶有整數(shù)數(shù)組作為形式參數(shù)的子過(guò)程:SubExample(XAsInteger)……EndSub當(dāng)調(diào)用一個(gè)帶數(shù)組參數(shù)的子過(guò)程時(shí),調(diào)用者只需在調(diào)用語(yǔ)句中指定傳遞值的數(shù)組名即可,而不必在后面加上圓括號(hào),如調(diào)用上例的Example子過(guò)程,可以使用以下語(yǔ)句:CallExample(items)其中,items是為形式參數(shù)指定特定值的數(shù)組,從中可見items后面不用帶圓括號(hào).1.2過(guò)程定義數(shù)組參數(shù)261.2過(guò)程定義以上說(shuō)明了如何定義一個(gè)過(guò)程,但在定義一個(gè)過(guò)程之前必須先對(duì)付過(guò)程進(jìn)行聲明,這需要使用DeclareSub語(yǔ)句,其一般形式為:DeclareSub過(guò)程名[([ByVal])參數(shù)名As變量類型[,…])]DeclareSub語(yǔ)句建立了一個(gè)過(guò)程名和參數(shù)列表,在通常情況下,每一個(gè)DeclareSub語(yǔ)句對(duì)應(yīng)一個(gè)真正的子過(guò)程,該子過(guò)程隨后在程序的Sub…EndSub結(jié)構(gòu)中定義1.2過(guò)程定義以上說(shuō)明了如何定義一個(gè)過(guò)程,但在定義一個(gè)過(guò)271.2過(guò)程定義DeclareSub語(yǔ)句還可以定義一個(gè)用其他語(yǔ)言(如C或者Pascal)編寫的外部程序,一旦聲明了一個(gè)外部程序,原程序可以像調(diào)用常規(guī)的MapBasic子過(guò)程一樣調(diào)用該外部程序。聲明一個(gè)外部程序的一般形式如下所示:DeclareSub過(guò)程名Lib“文件名”[Alias“外部程序初始名”][([ByVal])參數(shù)名As變量類型[,…])]調(diào)用一個(gè)外部程序與所使用的平臺(tái)相關(guān),在Windows中,外部程序可以存儲(chǔ)在Dll文件中,在Macintosh中,外部程序已XCMD形式存在,但不管操作平臺(tái)如何,DeclareSub語(yǔ)句的語(yǔ)法在本質(zhì)上是一樣的,1.2過(guò)程定義DeclareSub語(yǔ)句還可以定義一個(gè)281.2過(guò)程定義如果子過(guò)程帶有的局部變量與已存在的全局變量同名,任何對(duì)該變量的操作都只影響子過(guò)程中的局部變量,即子過(guò)程的局部變量使同名的全局變量不起作用此外,還需要注意的是編程人員不能將數(shù)組、用戶型變量以及Alias變量傳遞給值參數(shù),但可以將任何類型的變量傳遞給形式參數(shù)1.2過(guò)程定義如果子過(guò)程帶有的局部變量與已存在的全局變量291.3主過(guò)程主過(guò)程是MapBasic程序中必須包含的過(guò)程,是應(yīng)用程序運(yùn)行時(shí)第一個(gè)調(diào)用的過(guò)程,其他的子過(guò)程都必須通過(guò)主過(guò)程或其他子過(guò)程來(lái)調(diào)用,定義一個(gè)主過(guò)程的一般形式如下:DeclareSubMainSubMain語(yǔ)句列表EndSubMain是一個(gè)特殊的MapBasic過(guò)程名,如果應(yīng)用程序中包含一個(gè)名為Main的過(guò)程,當(dāng)運(yùn)行該應(yīng)用程序時(shí),Mapinfo將自動(dòng)先執(zhí)行Main過(guò)程。然而,程序員也可以不明確地定義主過(guò)程,而在程序的開頭附近寫入一句或幾句簡(jiǎn)單的語(yǔ)句,但這些語(yǔ)句必須在任何過(guò)程之外,MapBasic將把這些語(yǔ)句看成是一個(gè)主過(guò)程,這被成為一個(gè)隱含的主過(guò)程1.3主過(guò)程主過(guò)程是MapBasic程序中必須包含的301.4過(guò)程調(diào)用過(guò)程或外部程序(DLL,XCMD)的調(diào)用使用Call語(yǔ)句,其一般形式為:Call子過(guò)程名[([參數(shù)名][,…])]Call語(yǔ)句可以調(diào)用由Sub…End定義的常規(guī)的子過(guò)程,也可以調(diào)用Windows動(dòng)態(tài)鏈接庫(kù)的程序(Dll),但這時(shí)必須是在MapinfoforWindows中運(yùn)行該應(yīng)用程序,類似地,當(dāng)應(yīng)用程序在MapinfoforMacintosh中運(yùn)行時(shí),Call語(yǔ)句可以調(diào)用XCMD外部程序1.4過(guò)程調(diào)用過(guò)程或外部程序(DLL,XCMD)的調(diào)用311.4過(guò)程調(diào)用當(dāng)Call語(yǔ)句調(diào)用一個(gè)常規(guī)MapBasic過(guò)程時(shí),MapBasic將跳去執(zhí)行在子過(guò)程中語(yǔ)句,直到遇到EndSub語(yǔ)句,此時(shí),MapBasic從子程序中返回,并繼續(xù)執(zhí)行Call語(yǔ)句后面的語(yǔ)句,值得注意的是,此時(shí)Call語(yǔ)句只能調(diào)用同一應(yīng)用程序里面定義的子過(guò)程當(dāng)Call語(yǔ)句調(diào)用的是外部程序時(shí),MapBasic轉(zhuǎn)向執(zhí)行指定的外部程序直到該外部程序返回,對(duì)于WindowsDll外部程序?qū)嶋H是位于一個(gè)獨(dú)立的文件中,因此該指定的Dll文件在MapBasic運(yùn)行Call語(yǔ)句時(shí)必須存在而且可以獲得;對(duì)于XCMD文件情況類似,但調(diào)用XCMD時(shí),數(shù)組變量和用戶類型變量不能作為參數(shù)1.4過(guò)程調(diào)用當(dāng)Call語(yǔ)句調(diào)用一個(gè)常規(guī)MapBasi32例DeclareSubMainDecareSubCube(ByValoriginalAsFloat,cubedasFloat)SubMainDimx,resultAsFloatCallCube(2,result)‘resultnowcontainsthevalue2*2*2=8x=1CallCube(x+2,result)‘resultnowcontainsthevalue3*3*3=27EndSubSubCube(byvaloriginalAsFloat,cubedAsFloat)cubed=original^3EndSub例331.5事件處理程序在圖形用戶界面環(huán)境中,用戶通過(guò)鍵盤或鼠標(biāo)控制事件的發(fā)生,這些單擊鼠標(biāo)或其他由用戶發(fā)出的動(dòng)作稱為事件或系統(tǒng)事件,而事件處理程序是為了響應(yīng)系統(tǒng)事件的MapBasic程序的一部分,當(dāng)用戶產(chǎn)生一個(gè)事件時(shí),應(yīng)用程序必須通過(guò)事件處理程序?qū)Υ俗鞒鲰憫?yīng)在MapBasic中,子過(guò)程可以作為事件處理程序,MapBasic有許多特殊的過(guò)程,如SelChangedHander、WinClosedHander、RemoteMsgHandler、ToolHandler、EndHandler等,它們?cè)贛apBasic程序中具有重要作用,此外用戶還可以建立自己的子過(guò)程作為事件處理程序每一個(gè)事件處理程序必須有一個(gè)特殊的名字在一般情況下,用戶不需要使用Call語(yǔ)句去專門調(diào)用以上的特殊過(guò)程,如果MapBasic應(yīng)用程序中包含以上過(guò)程,當(dāng)某一類型的系統(tǒng)事件發(fā)生時(shí),MapBasic將會(huì)自動(dòng)調(diào)用相應(yīng)的過(guò)程。例如假設(shè)程序中有一個(gè)名為WinCloseHandler的過(guò)程,每當(dāng)用戶關(guān)閉一個(gè)窗口時(shí),MapBasic會(huì)自動(dòng)調(diào)用該過(guò)程1.5事件處理程序在圖形用戶界面環(huán)境中,用戶通過(guò)鍵盤或342.1自定義函數(shù)MapBasic支持多種不同的函數(shù),包括標(biāo)準(zhǔn)的Basic函數(shù)(例如Asc()、Format$()等)和Mapinfo或MapBasic特有的函數(shù)(例如,Distance()、ObjectGeography()).此外,用戶還可以在MapBasic自定義函數(shù),一旦定義了一個(gè)用戶自定義函數(shù),就可以像MapBasic標(biāo)準(zhǔn)函數(shù)一樣調(diào)用它2.1自定義函數(shù)MapBasic支持多種不同的函數(shù),包352.2函數(shù)的聲明要自定義函數(shù),首先必須對(duì)函數(shù)返回值和參數(shù)列表進(jìn)行定義,即函數(shù)的聲明。自定義函數(shù)的聲明,在MapBasic中采用Declare語(yǔ)句.一般地,Declare語(yǔ)句的基本語(yǔ)法如下:DeclareFunctionfname([[ByVal]parameterAsvar_type][,[ByVal]parameterAsvar_type…])Asreturn_typefname是函數(shù)名parameter是該函數(shù)的參數(shù)名var_type是變量類型,例如整數(shù)型return_type是一個(gè)標(biāo)準(zhǔn)變量類型,即函數(shù)的返回值,數(shù)組和自定義類型不被承認(rèn)2.2函數(shù)的聲明要自定義函數(shù),首

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論