
簡介Raize_6.1.1.12_DX10_1_Berlin_cocashu修正版是一份針對 Delphi Berlin即 DX10.1環(huán)境的 Raize 組件庫安裝資源重點修正了原版 pas 文件錯誤導(dǎo)致的編譯失敗問題。資源面向使用 Delphi 10.1 Berlin 并需要集成 Raize 控件的開發(fā)者也適合需要查看組件源碼或進(jìn)行二次封裝的進(jìn)階用戶。按說明將文件解壓到 C:\Program Files\Raize\ 后執(zhí)行 RC6\Source 目錄下的 !Build_RC6.cmd 即可完成環(huán)境配置作者親測可用。包體共包含 956 個文件大小約 10.74MB涵蓋 hpp 頭文件、pas 源文件、dcu 預(yù)編譯單元、dfm 窗體布局、bmp 圖像素材以及 dpk/dproj 工程文件和 cmd 構(gòu)建腳本結(jié)構(gòu)清晰便于按需選用。壓縮包內(nèi)還附有安裝說明和預(yù)先調(diào)整好的配置文件能幫助使用者快速避開組件編譯時的常見坑點。目前已有 330 人學(xué)習(xí)下載適合作為 Delphi Berlin 環(huán)境下 Raize 組件安裝與使用的可靠參考。1. Raize 6.1.1.12 在 Delphi 10.1 Berlin 上裝不上的真正原因版本、順序與路徑拿到 Raize_6.1.1.12_DX10_1_Berlin_cocashu修正版 這份安裝包時我第一反應(yīng)不是解壓而是先確認(rèn)它對應(yīng)的是哪個 Delphi 版本。Raize6 的 DX10.1 安裝說明關(guān)鍵詞其實只有一個10.1 Berlin。這個版本寫錯一個數(shù)字組件面板就會在裝完后一片空白IDE 啟動還可能直接彈“Cant load package”。裝 Raize 和裝普通控件不一樣它不是編譯完一個包就結(jié)束而是運(yùn)行期包、設(shè)計期包、Library Path 三條線要同時落位。很多人裝不上真不是包壞了而是把設(shè)計期包當(dāng)運(yùn)行期包裝或者編譯順序搞反了再不就是路徑里有中文把編譯腳本坑了。這篇筆記就是留給還在 10.1 Berlin 上維護(hù)老項目的開發(fā)者看的照著順序走十分鐘把它裝進(jìn) IDE。2. 安裝前準(zhǔn)備先核對版本號再解壓2.1 確認(rèn) IDE 版本、編譯器和包名的對應(yīng)關(guān)系Delphi 10.1 Berlin 在 IDE 的 About 界面里顯示版本號為 24.0對應(yīng)條件編譯指令是 VER240。Raize 6.1.1.12 的 DX10_1 目錄顧名思義就是為 10.1 Berlin 準(zhǔn)備的包文件命名里一般會體現(xiàn) 10_1少數(shù)使用 24 這個內(nèi)部代號。拿到安裝包先不要急著解壓先把目錄名看清楚確認(rèn)不是 DX10_2 或 DX10_3。我曾經(jīng)裝錯過一次 10.2 的包IDE 重啟后直接報二進(jìn)制格式錯誤整個組件面板消失最后只能靠清理注冊項救回來屬于最不值得踩的坑。確認(rèn)版本還有一個土辦法用記事本打開 .dpk 包文件看頭部引用的編譯器版本指令。如果是 VER240那就是給 10.1 Berlin 用的如果是 VER250 或 VER260那說明這份包是在別的 Delphi 版本下編譯的不要期待它能直接裝進(jìn) 10.1 Berlin。Raize 6.1.1.12 修正版之所以叫修正版通常是在原版基礎(chǔ)上補(bǔ)過編譯順序或高 DPI 下的圖標(biāo)問題它并不改變版本對應(yīng)關(guān)系。修正版包里一般會附一個說明文件安裝前建議先讀一遍。2.2 解壓位置與權(quán)限別放進(jìn) Program FilesRaize 組件包和大多數(shù) Delphi 控件一樣源碼與 .dpk 包文件需要保持路徑穩(wěn)定因為編譯產(chǎn)生的 .dcu 會寫入包目錄或 Lib 目錄之后 Library Path 引用的是絕對路徑。一旦解壓到 Program Files 這類系統(tǒng)保護(hù)目錄文件寫入會被 UAC 攔下編譯時報拒絕訪問這是新手最容易遇到的坑而且是那種看起來莫名其妙、實際原因很簡單的坑。我一般把 Raize 放在 C:\Raize_6.1.1.12 或者 D:\Raize\6.1.1.12路徑里不要帶中文、不要帶空格。帶空格路徑在少數(shù)批處理腳本里會被截斷IDE 本身能處理但修正版自帶的編譯腳本不一定能處理。解壓后大致是這樣一個結(jié)構(gòu)目錄 / 文件作用Packages存放 .dpk 包文件運(yùn)行期包與設(shè)計期包分開命名Lib編譯輸出的 .dcu 和運(yùn)行時 bpl 默認(rèn)落在這里Sources組件源碼 .pas之后 Library Path 需要指向這里Demos示例工程驗證階段可以直接打開來測試不同修正版的目錄名可能有細(xì)微差別以包內(nèi)說明為準(zhǔn)。這里補(bǔ)充一條經(jīng)驗解壓完先不要打開 Delphi先把目錄整個移動到位因為一旦編譯過再移動整個目錄之前的 dcu 和 bpl 路徑全部作廢又得重新編譯一遍。2.3 備份現(xiàn)有 IDE 包配置給后悔藥留個位置裝 Raize 之前我強(qiáng)烈建議先備份當(dāng)前 IDE 的包配置。Delphi 的已安裝包清單不是存在某個普通配置文件里而是寫在用戶配置目錄的 BDS\24.0 下的 Known IDE Packages 注冊項中。裝新組件包之前打開注冊表編輯器把 BDS\24.0 下和 Packages 相關(guān)的項導(dǎo)出成 .reg 文件保存到磁盤萬一裝壞了可以直接導(dǎo)回去。這個操作是血淚經(jīng)驗換來的。有次我在一個 10.1 Berlin 環(huán)境里同時裝了 Raize 兩個版本IDE 每次啟動都彈找不到 bpl組件面板也壞了最后就是靠這份備份導(dǎo)回去才恢復(fù)。備份文件很小幾十 KB但能省下半天排查時間。導(dǎo)出時注意把 HKCU 和 HKLM 兩處的 BDS\24.0 都導(dǎo)出不同組件包注冊的位置不完全一樣。2.4 看修正版自帶的批處理腳本在做什么很多修正版會帶一個 Install.bat 或 Build.bat。不要直接雙擊運(yùn)行先打開看內(nèi)容。我見過的腳本里有些會先清理當(dāng)前已編譯的 dcu 文件再調(diào)用命令行編譯器重新編譯如果此時 Delphi IDE 正開著并且占用了某些 bpl 文件腳本會在清理或復(fù)制階段中途失敗報文件被占用。正確順序是先關(guān)閉 Delphi IDE再單獨(dú)運(yùn)行腳本或者干脆不用腳本完全參照腳本里的編譯順序在 IDE 里手動編譯。混用兩種方式是翻車高發(fā)區(qū)腳本編到一半切到 IDE 手動編譯經(jīng)常留下編譯一半的 dcu后面裝設(shè)計期包時各種報錯都來了。確定走哪條路之后就一條路走到底。3. 編譯與安裝先運(yùn)行期包后設(shè)計期包3.1 運(yùn)行期包與設(shè)計期包的分工要先搞清楚Raize 的包文件命名規(guī)則不帶 D 后綴的是運(yùn)行期包負(fù)責(zé)提供組件實現(xiàn)代碼程序編譯和發(fā)布時依賴它帶 D 后綴的是設(shè)計期包負(fù)責(zé)把組件圖標(biāo)注冊到 IDE 的組件面板只在 IDE 里加載。安裝順序因此是固定的先編譯運(yùn)行期包讓 bpl 和 dcu 落地再打開設(shè)計期包點擊 Install。順序反了設(shè)計期包找不到運(yùn)行期包里的類編譯時直接報找不到 RzButton 之類的引用。如果無法從文件名分辨哪個是設(shè)計期包就打開 .dpk 看 Requires 子句。設(shè)計期包幾乎都會在 Requires 列表里引用剛剛編譯好的運(yùn)行期包而運(yùn)行期包的 Requires 里只有 VCL 和 RTL 這些 IDE 自帶包。這個判斷方法對所有 Delphi 第三方組件通用不只限于 Raize。3.2 在 IDE 里編譯運(yùn)行期包操作按下面四步走關(guān)閉可能占用 bpl 的其他 Delphi 工程打開 Delphi 10.1 Berlin。File Open定位到 Packages 目錄選擇不帶 D 后綴的 .dpk 文件。在 Project Manager 里右鍵該包節(jié)點選擇 Compile。編譯完成后確認(rèn) Messages 窗口沒有 E2003 或類似報錯。編譯前我習(xí)慣先打開 Project Options把輸出目錄指到包目錄下的 Lib 文件夾。這樣做的目的是讓 dcu 位置可控之后配置 Library Path 時不用寫一堆分散的路徑排查問題也容易。有些修正版默認(rèn)把輸出指到了系統(tǒng) BPL 目錄這種也能用但換機(jī)器遷移時路徑容易對不上。編譯成功的標(biāo)志是 Messages 窗口出現(xiàn) Build OK 或 Done 字樣。這一步千萬不要順手點 Install運(yùn)行期包沒有 Install 選項強(qiáng)行安裝會報“Cannot install a runtime package”到時候還得回頭查是不是點錯了文件。3.3 安裝設(shè)計期包并檢查組件面板運(yùn)行期包編譯通過后的下一步File Open 打開那個帶 D 后綴的 .dpk 文件。在 Project Manager 里右鍵包節(jié)點選擇 Install。彈出安裝成功的提示后組件面板應(yīng)該出現(xiàn)一個名為 Raize 的頁簽頁簽里是一整套 Rz 開頭的組件。如果組件面板沒出現(xiàn) Raize 頁簽先不要急著判定失敗。有時候要新建或切換一個 Form 才會刷新組件的顯示有時候是 IDE 緩存了組件列表重啟 IDE 后頁簽才出現(xiàn)。這就是為什么驗證一定要放在最后統(tǒng)一做而不是裝到一半就下結(jié)論。我還遇到過頁簽出現(xiàn)了、組件卻拖不出來的情況這種多半和后面要說的 Library Path 配置有關(guān)。3.4 腳本安裝也是這條路只是自動化了決定用批處理腳本安裝的話邏輯和手動是一樣的。腳本一般會依次完成清理舊 dcu、編譯運(yùn)行期包、復(fù)制 bpl 到系統(tǒng)目錄。但腳本很難替你做設(shè)計期包的 Install 動作因為這個操作依賴 Delphi IDE 的交互環(huán)境批處理無法穩(wěn)定模擬。所以腳本跑完后大概率還是需要手動回到 IDE 打開設(shè)計期包點一次 Install這一步省不了。如果你在 32 位環(huán)境下安裝不要被網(wǎng)上一些“64 位包”的說法干擾。Delphi 10.1 Berlin 的 IDE 本身是 32 位程序組件包也是面向 IDE 加載的不存在 64 位 IDE 安裝包這種東西。出現(xiàn)“64 位”字樣的說明多半指的是運(yùn)行時庫面向 Win64 目標(biāo)平臺的編譯支持跟 IDE 安裝沒有關(guān)系。4. 環(huán)境配置Library Path 與運(yùn)行時包缺一不可4.1 Library Path不加就是 File Not Found安裝完成后新建項目組件面板里能看到組件拖到 Form 上也沒問題但一編譯就報 File not found 或者找不到 dcu這是 Library Path 沒配。設(shè)計期包的 Installation 只解決 IDE 面板顯示不負(fù)責(zé)給項目編譯提供源碼路徑這是兩個完全獨(dú)立的配置。打開 Tools Options Delphi Options Library在 Library path 里追加兩個路徑Raize 的 Sources 目錄和 Lib 目錄中間用分號分隔。加 Sources 是因為某些組件在同一工程里既有編譯期源碼引用又有設(shè)計期表現(xiàn)加 Lib 是為了讓編譯器能找到已經(jīng)編譯好的 .dcu 文件。路徑寫好后點輸入框右側(cè)的省略號按鈕確認(rèn)路徑真實存在然后再重啟一次 IDE。這里有個細(xì)節(jié)容易被忽略Library Path 配置完成后IDE 的代碼補(bǔ)全有時不會立刻刷新。重啟 IDE 是最穩(wěn)妥的方式不要省這一步。我見過有人在 Library Path 里寫了一個不存在的路徑IDE 編譯時靜默跳過結(jié)果還是報找不到單元反過來懷疑包沒裝好來回折騰半天。4.2 運(yùn)行時包的選擇壓進(jìn) exe 還是動態(tài)引用Raize 運(yùn)行期包有兩種使用方式。第一種是靜態(tài)鏈接在 Project Options 里不勾選 Use runtime packages組件代碼直接編譯進(jìn) exe部署時不需要額外帶 bpl 文件。第二種是動態(tài)引用勾選 Use runtime packages并在包列表里加入 Raize 對應(yīng)的 bpl 名稱exe 體積會小一些但部署時必須把對應(yīng) bpl 一起帶上。維護(hù)老項目時我一般選靜態(tài)鏈接。Raize 的 bpl 依賴 VCL 運(yùn)行時包如果系統(tǒng)里同時存在多個版本或其他組件包的 bpl動態(tài)引用場景下經(jīng)常出現(xiàn)啟動時彈找不到 bpl 的錯誤而這個錯誤對話框一閃而過用戶截圖都截不到排查效率極低。靜態(tài)鏈接把一切壓進(jìn) exe部署現(xiàn)場少一個變量。但如果項目本身已經(jīng)啟用了 runtime packages那就不要為了 Raize 單獨(dú)改成靜態(tài)整個項目統(tǒng)一用動態(tài)最穩(wěn)混用會在運(yùn)行時出現(xiàn)類重復(fù)注冊的報錯那個報錯文本加長都看不懂。順著報錯看下去會發(fā)現(xiàn)是同一份類被加載了兩次根源就是混用。4.3 版本殘留把舊的 dcu 和 bpl 清干凈再裝老項目之前用過 Raize 5.x這次裝完 6.1.1.12 以后編譯舊代碼報類型不匹配大概率是舊 dcu 殘留。Delphi 編譯時對 dcu 的查找順序是 Library Path 優(yōu)先如果舊版 dcu 還躺在某個目錄里編譯器會優(yōu)先命中舊文件新裝的和舊的打架報出來全是類型轉(zhuǎn)換錯誤。清理按這個順序來到 Raize 安裝目錄下搜索 *.dcu 和 *.bpl確認(rèn)沒有舊版本殘留文件。到用戶目錄下 BDS\24.0 對應(yīng)的 bpl 緩存目錄搜索 Rz*.bpl有就刪除。在 IDE 的 Component Install Packages 里看 Raize 條目是否存在兩個版本先移除舊版再裝新版。確認(rèn)干凈后重新編譯一次運(yùn)行期包再安裝一次設(shè)計期包。清理順序不要顛倒。先刪文件、后動注冊項否則 IDE 啟動時還會嘗試加載已經(jīng)被刪掉的包報錯比原來還難看。這一步做完再回去編譯舊項目類型不匹配的報錯通常會消失。如果還沒消失去工程的搜索路徑里檢查一遍看有沒有單獨(dú)寫死指向舊版 dcu 的路徑那種手動加的路徑會繞過全局 Library Path屬于隱藏雷。5. 安裝排錯五個反復(fù)出現(xiàn)的坑5.1 編譯運(yùn)行期包報 E2003現(xiàn)象點 Compile 后 Messages 窗口彈出 E2003行號指向 Raize 源碼里某個文件代碼看起來卻沒問題。原因多數(shù)情況是源碼所在路徑里有中文或空格少數(shù)情況是 IDE 緩存了上一個版本的 dcu導(dǎo)致新舊源碼混編。E2003 這類序號錯誤經(jīng)常被誤判為源碼損壞實際上源碼好好的是環(huán)境問題。解決把整個 Raize 目錄復(fù)制到一個純英文、無空格的路徑下重新編譯并在編譯前刪除 Lib 目錄下所有 dcu 文件。這個動作我在不同機(jī)器上做過至少五次每次都能解決。5.2 設(shè)計期包 Install 按鈕是灰的現(xiàn)象打開帶 D 后綴的 .dpk 后右鍵菜單里的 Install 是禁用狀態(tài)點不下去。原因打開錯了包文件某些修正版把運(yùn)行期包的文件名也加了 D 后綴或者當(dāng)前 IDE 里已經(jīng)加載了這個包重復(fù)加載狀態(tài)下 Install 會被禁用。解決對比 Requires 子句確認(rèn)它依賴了剛編譯好的運(yùn)行期包。然后到 Component Install Packages 里搜索 Raize如果已經(jīng)存在就先 Remove 再回來重新 Install。這個問題最容易發(fā)生在安裝腳本跑過一半之后所以前面強(qiáng)調(diào)安裝方式要二選一。5.3 有 Raize 頁簽但組件是空白的現(xiàn)象IDE 重啟后組件面板出現(xiàn) Raize 頁簽展開后沒有組件圖標(biāo)或者圖標(biāo)是一個空方塊。原因設(shè)計期包注冊成功了但包依賴的某個 bpl 不能被 IDE 找到。常見于運(yùn)行期包編譯后沒有復(fù)制到系統(tǒng) BPL 目錄IDE 只加載到了設(shè)計期包設(shè)計期包加載過程中找不到依賴組件圖標(biāo)自然出不來。解決把 Lib 目錄下生成的 Rz*.bpl 全部復(fù)制到系統(tǒng) BPL 目錄重啟 IDE。如果是高分屏下圖標(biāo)空白但組件能拖那是 DPI 縮放問題嘗試關(guān)閉 IDE 的 DPI 縮放或者確認(rèn)裝的是修正版里包含高 DPI 修復(fù)的那一份。5.4 舊項目編譯通過但 Form 打開空白現(xiàn)象編譯沒有任何報錯運(yùn)行時整個 Form 是空白的或者 IDE 設(shè)計界面提示 Class RzButton not found。原因項目里的 dfm 文件引用的是 Raize 5.x 的類名而 IDE 里只注冊了 6.1.1.12dfm 里舊類名在設(shè)計期找不到對應(yīng)的已注冊類。這個現(xiàn)象在老項目里非常普遍不是 Raize 6 裝壞了是新舊版本的類名變更沒有被同步。解決用記事本打開 Form 的 .dfm 文件檢查 Rz 開頭的對象類名把舊版類名替換為安裝包里實際提供的類名。dfm 文件默認(rèn)是文本格式直接查找替換即可如果項目里 dfm 被配置成二進(jìn)制格式先轉(zhuǎn)成文本再處理。替換前記得備份文件這一步相當(dāng)于給舊項目打補(bǔ)丁改錯了可以還原。5.5 IDE 啟動時報 Cant load package現(xiàn)象IDE 一啟動就彈錯誤框提示某個 Rz*.bpl 無法加載附帶類似“%1 is not a valid Win32 application”或“不是有效的 Win32 應(yīng)用程序”的內(nèi)容。原因這個報錯基本可以斷定包是在其他 Delphi 版本下編譯的。誤裝了其他版本對應(yīng)編譯的 bpl會讓 IDE 在啟動階段嘗試加載時就掛掉連進(jìn)入主界面的機(jī)會都沒有。解決確認(rèn)安裝的是對應(yīng) 10.1 Berlin 的版本不要混裝 10.2 或更高版本的包。如果已經(jīng)誤裝去 IDE 用戶配置目錄 BDS\24.0 下的已知包注冊項找到對應(yīng) Rz*.bpl 條目并刪掉然后在安裝目錄里把不匹配的 bpl 也清掉重新編譯運(yùn)行期包后再裝設(shè)計期包。操作時先關(guān) IDE改完再啟動。這個問題每次都有人踩原因就是下載時沒核對路徑里的 DX10_1 標(biāo)記順手把別的版本也裝進(jìn)去了。6. 裝完怎么驗證新建一個 VCL 工程拖上 Rz 組件跑一遍驗證不是最后才做而是每次裝完立刻做。裝完 Raize 6.1.1.12 后我固定走四步四步全過才算這套環(huán)境真的能用。第一步新建一個 VCL Forms Application在 Project Options 里確認(rèn) Target Platform 是 32 位 Windows并取消勾選 Use runtime packages避免驗證過程混入 bpl 路徑問題。第二步打開組件面板里的 Raize 頁簽依次拖 TRzButton、TRzEdit、TRzMemo 到 Form 上先看頁簽組件是否能正常落位。第三步為按鈕寫一句代碼調(diào)用組件procedure TForm1.RzButton1Click(Sender: TObject); begin // 向 RzMemo 寫入當(dāng)前時間用來確認(rèn)運(yùn)行期包里的類真的可用 RzMemo1.Lines.Add(FormatDateTime(yyyy-mm-dd hh:nn:ss, Now)); end;這里用了 FormatDateTime屬于 RTL 標(biāo)準(zhǔn)函數(shù)不依賴 Raize真正要驗證的是 RzMemo 和 RzButton 這兩個類是否能正常實例化、是否能正確響應(yīng)事件。第四步按 F9 編譯運(yùn)行點擊按鈕窗口上的 RzMemo 中出現(xiàn)一行時間戳說明運(yùn)行期包和編譯鏈都正常。如果 RzMemo 顯示空白優(yōu)先查 Library Path 里兩個目錄的順序和存在性。順帶提醒驗證工程不要直接拿老項目試。老項目里殘留的舊 Raize 引用會讓驗證結(jié)果失真萬一報錯也分不清是新裝環(huán)境的問題還是老項目自身的問題。每次裝完任何 Delphi 控件我都強(qiáng)制自己新建一個空工程拖一套組件跑一遍確認(rèn)之后再開始真正的遷移。這個習(xí)慣救過我很多次希望幫到你。本文還有配套的精品資源點擊獲取