• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 關 閉

    新聞中心

    EEPW首頁 > 工控自動化 > 設計應用 > OLE自動化技術在Delphi與MapInfo集成地圖開發中

    OLE自動化技術在Delphi與MapInfo集成地圖開發中

    作者: 時間:2011-04-07 來源:網絡 收藏

    (2) 應用程序中 窗口
    Ole 對象建立后,后臺 成功啟動,可以使用該對象的Do 方法向
    發送命令,如:
    Olemapinfo.do(’set application window ’+winhand);
    Olemapinfo.do(’set next document parent’+winhand+’style l’);//重定位MapInfo 文件窗口其中,還可用來重定位其他特殊窗口或圖例,可采用 MapBasic 的”setwindow”語句;
    “style1”也可以為“style2”或“style3”,它表明所創建窗口的類型。
    完成上述設置,就可以在客戶程序中打開 MapInfo 文件了,如:
    Olemapinfo.do (‘open table”city.tab”’);
    Olemapinfo.do (‘map from city ’);//打開MapInfo 表直接調用MapInfo 菜單或按鈕命令對窗口進行操作,只需調用MapInfo 的
    RunMenuCommand 方法,從而保留有標準的MapInfo 按鈕的功能,大大減少了重新編程的
    難度而輕松實現MapInfo 的基本功能。具體語句如下:
    Olemapinfo.runmenucommand(1705);//放大
    Olemapinfo.runmenucommand(1706);//縮小
    Olemapinfo.runmenucommand(1702);//漫游
    (3) 終止MapInfo 程序
    在調用 的CreateOleObject0 函數來創建一個新的MapInfo 事件時,在釋放該對象
    變量時,該MapInfo 事件就終止了,當該對象變量為局域變量時, 當退出局域過程時,該
    MapInfo 事件就被釋放了,若為全局變量時,必將其賦值為”Unassigned”才能得以釋放。語
    句如下:Olemapinfo:=Unassigned;//釋放全局變量,終止MapInfo程序Application.Terminate;//終止 程序
    3.3 Delphi 中MapInfo CallBack 的實現
    通過對程序的設置,可以使MapInfo 能自動地向客戶程序發送信息,這種類型的標志信息,即事件導致MapInfo 調用客戶程序,這種消息稱之為回調。

    本文引用地址:http://www.czjhyjcfj.com/article/162202.htm

    要使用回調,客戶端程序必須能充當 服務器,而利用Delphi 能很輕易實現。
    其實現原理如圖2:

    圖 2 Delphi 中實現MapInfo 的callback 的原理圖
    Fig.2 The schematic diagram of realizing callback of MapInfo in Delphi
    要實現 Maplnfo 的CallBack,一般有以下幾個步驟:
    1)創建一個類,定義若干 方法(Method)。如果要得到MapInfo 的狀態欄上的內容,
    則創建SetStatusText 方法(帶一個字符串參數);如果要取得發生變化的窗口的ID 號,
    則創建Windowcontentschanged 方法(帶一個整形參數);
    2)為在1)中定義的類創建一個對象;
    3)在確認MapInfo 已經啟動后,調用MapInfo 的SetCallBack 方法,將 對象
    注冊MapInfo 所發送消息的“接收器”中;
    4)自定義菜單或按鈕,通過這些菜單或按鈕來調用在1)中定義的方法。
    當 MapInfo 中發生一個事件時,MapInfo 就會將相應的信息組織成一定的形式,以方法
    的參數方式傳遞到客戶應用程序。在這些方法的內部,程序員可以對這些信息進行處理,提
    取所需的信息。以自定義客戶程序的狀態欄為例,回調的使用方法如下:
    1)建一個類,定義SetStatusText 方法。此方法帶一個WideString 類型的參數StatusText。
    這個參數是MapInfo 向客戶程序傳遞過來的。
    在 Delphi6.0 中選擇File|New|ActiveX|Automation Object,通過啟動Automation
    Object 向導打開“Type Library”編輯器來實現。這里假設創建的類名為TmyCallBack。
    2)應用程序窗體中添加狀態欄。
    3)使用第一步中定義的類創建一個對象。
    varCallBack := TMyCallBack.Create;
    4)調用自動OLE 對象的SetCallBack 方法傳遞參數。
    oleMapInfo.SetCallback(varCallBack As IMyCallBack);
    5)在SetStatusText 方法中處理由MapInfo 傳遞的StatusText 參數,控制狀態欄的顯示。
    procedure TMyCallBack.SetStatusText(const StatusText: WideString);
    begin MainForm.StatusBar1.Panels[0].Text := StatusText;
    //MainForm 是容納地圖組件的窗體,StatusBar1 是添加狀態欄的缺省名,panel,用于顯
    示MapInfo 的狀態欄上的內容;
    End;
    4 結束語
    利用 OLE 自動化, 通過 Delphi 實現了MapInfo 的二次,充分發揮了Delphi
    編程工具強大的數據庫編程能力和MapInfo Professional 的圖形處理能力。而在過程中,
    兩者是相互獨立的,Delphi 可以很方便地并不需做任何改動地調用MapBasic 代碼,實現通
    過簡單的OLE 自動化提交控制命令來完成MapInfo Professional 的功能和效果,取得很
    好的應用效果。同時,在進行MapInfo 消息回調處理方法上,也可利用OLE 自動化
    MapInfo Professional 的自動回調消息。

    pid控制相關文章:pid控制原理



    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 桐柏县| 农安县| 定日县| 望都县| 七台河市| 湘潭县| 乐陵市| 龙海市| 桃园市| 兴城市| 化德县| 武邑县| 故城县| 海门市| 大石桥市| 青冈县| 桓台县| 淮北市| 莎车县| 郓城县| 左权县| 平利县| 兖州市| 锡林浩特市| 岚皋县| 新宾| 石楼县| 淮北市| 辉南县| 西平县| 华容县| 临夏市| 礼泉县| 哈尔滨市| 曲松县| 黑龙江省| 尚志市| 南京市| 汪清县| 锦州市| 财经|