腳本擴展專家

腳本擴展專家

該專家使用 RemObjects Pascal Script 提供了 IDE 中的動態 Pascal 腳本的解釋執行的支持，包括腳本控制窗口和腳本擴展設置等，可從菜單項中調用，也可由特定的 IDE 事件觸發。

腳本控制窗口

腳本控制窗口提供了對腳本文件的編譯運行等控制功能，而腳本文件的編輯則由 IDE 的編輯器來處理。腳本窗口上部是工具欄，中間是信息輸出欄，其完整界面如圖：

- 新的腳本：在 IDE 的編輯器窗口中新建一空白腳本框架。

- 從文件中裝入：彈出一打開文件對話框，在 IDE 的編輯器窗口中打開一 Pascal 文件。 通過下拉菜單可以直接打開腳本列表中的腳本文件以及 PSDemo 目錄中的腳本例子。

- 增加到腳本列表：將當前 IDE 編輯器中的腳本文件增加到腳本設置窗口中的列表中。

- 設置：彈出腳本設置窗口供設置和管理各個腳本。

- 編譯腳本：編譯 IDE 中當前編輯窗口的腳本源文件內容，編譯信息在信息欄中輸出。

- 運行腳本：運行 IDE 中當前編輯窗口的腳本源文件內容。

- 幫助：顯示此幫助信息。下拉菜單中的項還可顯示 PSDecl 和 PSDemo 目錄中的內容供參考。

- 關閉：關閉當前窗口。

腳本擴展設置

腳本擴展設置窗口允許用戶管理腳本文件庫，各項腳本會顯示在腳本擴展專家的子菜單中。腳本擴展設置窗口上部是工具欄，左邊是腳本列表，右邊是腳本設置區。如圖所示：

- 增加：在列表中增加一新腳本供編輯。

- 刪除：刪除腳本列表中選中的腳本項。

- 清空：清空列表，刪除全部腳本項。

- 從文件中導入：從外部 XML 文件中導入腳本列表。

- 導出到文件：將所有腳本項導出成 XML 文件。

- 上移：將選中的腳本項上移一行。

- 下移：將選中的腳本項下移一行。

- 幫助：顯示此幫助信息。

- 關閉：關閉當前窗口。

- 名稱：設定被編輯腳本項在腳本列表中的顯示名稱。

- 描述：該腳本的描述文字。

- 文件：該腳本所在的源文件的全路徑名。

- 圖標：該腳本顯示在菜單項中的圖標，如不指定圖標則無圖標顯示。

- 熱鍵：執行此腳本的快捷鍵，默認無。

- 該腳本有效：勾選表示此腳本有效，可被編譯執行，也能在所設置的事件觸發時被執行。

- 手動執行腳本時需要確認：勾選表示手動執行此腳本時會彈出一對話框，需要用戶確認是否執行。由事件觸發執行的腳本不受此選項的影響。

- 腳本通知選項：腳本運行有兩種方式，一是手動調用，二是事件觸發運行。該樹形復選框可設置當前腳本在 IDE 觸發哪些事件時被調用運行。

  - 手動運行：被手工調用。

  - IDE加載完畢後觸發：當 IDE 啟動完成時調用。

  - 編譯前觸發：編譯前調用。

  - 編譯後觸發：編譯後調用。

  - 文件通知觸發：文件事件觸發時調用，包括以下事件：

    - ofnFileOpening：某文件即將打開時觸發的事件。

    - ofnFileOpened：某文件打開後觸發的事件。

    - ofnFileClosing：某文件即將關閉時觸發的事件。

    - ofnDefaultDesktopLoad：默認的桌面設置加載時觸發的事件。

    - ofnDefaultDesktopSave：默認的桌面設置保存時觸發的事件。

    - ofnProjectDesktopLoad：當前工程的桌面設置加載時觸發的事件。

    - ofnProjectDesktopSave：當前工程的桌面設置保存時觸發的事件。

    - ofnPackageInstalled：包文件加載後觸發的事件。

    - ofnPackageUninstalled：包文件卸載後觸發的事件。

  - 編輯器改變時觸發：源碼編輯器事件觸發時調用，包括以下事件：

    - setOpened：源碼編輯器打開一文件時觸發的事件。

    - setClosing：源碼編輯器關閉一文件時觸發的事件。

    - setModified：源碼編輯器改動後觸發的事件。

    - setEditViewInsert：源碼編輯器新增一 EditView 時觸發的事件。

    - setEditViewRemove：源碼編輯器關閉一 EditView 時觸發的事件。

    - setEditViewActivated：源碼編輯器的某 EditView 變為活動時觸發的事件。

  - 設計器改變時觸發：窗體編輯器事件觸發時調用，包括以下事件：

    - fetOpened：打開一窗體編輯器後觸發的事件。

    - fetClosing：關閉一窗體編輯器前觸發的事件。

    - fetModified：窗體編輯器改動後觸發的事件。

    - fetActivated：某窗體編輯器變為活動時觸發的事件。

    - fetSaving：窗體編輯器保存時觸發的事件。

    - fetComponentCreating：窗體編輯器上新建組件前觸發的事件。

    - fetComponentCreated：窗體編輯器上新建組件後觸發的事件。

    - fetComponentDestorying：窗體編輯器上刪除組件前觸發的事件。

    - fetComponentRenamed：窗體編輯器上組件改名時觸發的事件。

  - Application事件觸發：Application對象的指定事件觸發時調用，包括以下事件：

    - aeActivate：IDE 切換至前台時觸發的事件。

    - aeDeactivate：IDE 切換至後台時觸發的事件。

    - aeMinimize：IDE 最小化時觸發的事件。

    - aeRestore：IDE 從最小化恢復正常時觸發的事件。

    - aeHint：顯示Hint時觸發的事件。

  - 窗體切換後觸發：IDE 內窗體切換時觸發的事件。

- 置於編輯器浮動按鈕菜單：勾選此選項後，該腳本將出現在編輯器的浮動按鈕的下拉菜單中。

- 置於設計器右鍵菜單：勾選此選項後，該腳本將出現在設計器的右鍵菜單中。

- 腳本搜索路徑：全局選項，設置腳本運行時的庫文件搜索路徑，每行一個路徑。

腳本語法與函數庫簡介

PascalScript 腳本的語法和 Object Pascal 大體相同，但有以下幾點是需要說明的：

- PascalScript 腳本語法不支持整型到對像類型間的強制類型轉換，也即不支持 TObject(0) 這樣的語法。欲實現這這種轉換，可以利用輔助函數 function CnIntToObject(AInt: Integer): TObject; 來完成。

- PascalScript 腳本語法不支持函數調用中的默認參數，也不支持 overload。

- PascalScript 腳本語法不支持接口中的屬性，可用屬性對應的讀寫方法來替代。

- PascalScript 支持在腳本中聲明外部 DLL 函數並調用。

- PascalScript 不支持使用 as 關鍵字或 QueryInterface 函數或 Supports 函數來針對接口實例進行類型轉換，但可以用強制類型轉換如 IDispatch(Intf) 來代替實現。

- PascalScript 的內置 PChar 類型始終是 PAnsiChar，因此在 Delphi 2009 或以上版本中，無法使用參數聲明成 PChar 實質上是 PWideChar 的函數，只有部分帶 PChar 參數的 Windows API 我們註冊成了 Ansi 版本還繼續可用。

- Readln 函數經過了重新實現，以彈出輸入框的方式接受用戶輸入；Writeln 則重定向到了腳本窗口的輸出。

PascalScript 腳本中可以使用的庫函數均需要 CnWizards 在編譯期寫明並在運行期預先註冊。CnWizards 目前預註冊了一批系統函數和 IDE 的 Open Tools API 接口，其具體列表在安裝目錄的 PSDecl 目錄下。需要說明的是，PSDecl 目錄內的文件並不被運行期的 CnWizards 使用，而僅僅只供用戶參考，它們基本來源於 VCL 中的同名文件但只包含聲明不包括實現部分，並且為了適應 PascalScript 語法，可能有細微修改。凡是在 PSDecl 目錄中各文件內列出的函數均可在 CnWizards 提供的 PascalScript 環境中調用，而函數使用方面的詳細幫助則可查閱 Delphi 的幫助，這裡不再重複。

安裝目錄的 PSDeclEx 目錄下的文件，是由 CnWizards 額外註冊的單元，主要包括對 Open Tools API 和 IDE 功能的訪問封裝。這些文件也不參與編譯，不過它們都帶有空實現體，以支持在 IDE 編輯器中的自動完成功能。

CnWizards 的安裝目錄的 PSDemo 目錄下自帶了部分 PascalScript 的 Demo，用戶可參考其代碼。

以上兩目錄的內容均在不斷完善中，也歡迎用戶自行編寫腳本來擴充 CnWizards 的功能。

怎樣編輯腳本？

腳本專家本身並不提供腳本編輯器，您可以使用任何一個文本編輯器來編輯腳本文件，IDE 本身的編輯器就是最好的工具。您只需要在 IDE 編輯器中象編寫普通的代碼一樣編寫腳本，就可以利用 IDE 的代碼完成和 CnWizards 的代碼輸入助手來提高效率。需要注意的是：如果您在腳本中 uses 了 ToolsAPI，您需要在 IDE 的搜索路徑中加入 ToolsAPI 單元所在的目錄；如果您 uses 了 CnWizUtils 等在 PSDeclEx 目錄下聲明的文件，同樣也需要在 IDE 的搜索路徑中加入 PSDeclEx 目錄。

怎樣處理腳本事件與參數？

一個腳本可被手工調用，也可設置為在觸發某事件時調用。腳本文件內部可以使用預設置的全局對像 Event 來獲得此腳本被調用時的事件類型和參數。Event 是一 TCnScriptEvent 類型的對象，其屬性 Mode 值是 TCnScriptMode，對應於上文的 smManual, smIDELoaded, smBeforeCompile, smAfterCompile, smFileNotify, smSourceEditorNotify, smFormEditorNotify，smApplicationEvents，smActiveFormChanged，因此在腳本開頭檢查 Event 對象的 Mode 值便可確定此腳本是被何種事件觸發的。對於某些類型的事件，它們被觸發時腳本可能需要更多的信息，比如編譯成功與否、當前文件名、當前編輯器等，對於此等事件，Event 對像在腳本運行前被初始化成了 TCnScriptEvent 類的子類如 TCnScriptSourceEditorNotify 等，用戶在腳本中可通過類型強制轉換將 Event 轉換成需要的子類來獲取參數。

更詳細的說明，請參考 PSDeclEx 目錄下的 ScriptEvent 文件以及例子中的 FormEventDemo.pas 等文件。

相關主題

IDE 專家基本操作

IDE 專家設置

關於 IDE 專家包

(C)版權所有 2001-2025 CnPack 開發組