2、根據純html,改造成DeWeb控件
如何生成DeWeb支持的控件?
其實不難,也就是編譯一個符合DeWeb規范的動態鏈接庫DLL即可。
DeWeb規范有2點:
(1)命名,命名必須是“dw”+“Delphi中相應控件的類名”,如“dwTButton”,“dwTComboBox”,也可以是第三方的控件類名,如“dwTRzPageControl”
有時,一個Delphi的控件需要同時改造成多個Web(也即DeWeb)中的控件,可以通過控件的HelpKeyword屬性進行再次區分。
本例中需要用增加editor.md控件, 感覺用Delphi中的TRichEdit比較相近,所以准備用TRichEdit來改造,DLL的工程命名為dwTRichEdit.dpr,
為了方便其見,直接打開dwTButton.dpr,另存為dwTRichEdit.dpr,並保存在同一目錄,即source\dwVcls
注: 如果是完全手動創建,建議也放到這個目錄,並設置Project Options -> Building -> Delphi Compiler -> Output directory 為 ..\Runtime\Vcls
並設置 run -> Parameters -> Debugger ->
Browse 為 ..\Runtime\DeWebServer.exe
Work directory 為 ..\Runtime\
(2)接口函數,共7個
dwGetExtra,用於引入非ElementUI框架的js/css,
函數聲明為
function dwGetExtra(ACtrl:TComponent):string;stdCall;
返回值為JSON數組表示的字符串
比如本例,需要引入
返回值應該為
[
"<link rel="stylesheet" href="dist/_editormd/style.css" />",
"<link rel="stylesheet" href="dist/_editormd/editormd.css" />",
"<script src="dist/_jquery/jquery.min.js">",
"<script src="dist/_editormd/editormd.min.js">"
]
為了防止在組合JSON出錯,建議采用JSON單元來創建,可以自動轉義
**dwGetHead**,用於生成對應DeWeb控件(也就是HTML)的頭部
函數聲明為
function dwGetHead(ACtrl:TComponent):string;StdCall;
**dwGetTail**,用於生成對應DeWeb控件(也就是HTML)的尾部
函數聲明為
function dwGetTail(ACtrl:TComponent):string;StdCall;
**dwGetData**,用於生成對應DeWeb控件(也就是HTML)的相應數據
函數聲明為
function dwGetData(ACtrl:TControl):string;StdCall;
**dwGetEvent**,針對相應的事件進行處理
函數聲明為
function dwGetEvent(ACtrl:TComponent;AData:String):string;StdCall;
**dwGetMethod**,根據實時控件數據,生成更新控件狀態的代碼
函數聲明為
function dwGetMethod(ACtrl:TControl):string;StdCall;
**dwGetMounted**,頁面渲染完成后控件需要執行的代碼(這個函數大部分控件未用到)
函數聲明為
function dwGetMounted(ACtrl:TControl):string;StdCall;