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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

最新文檔

評論

0/150

提交評論