DeWeb进阶 :控件开发 --- 2 改造成DeWeb控件

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,并保存在同一目录,即sourcedwVcls
注: 如果是完全手动创建,建议也放到这个目录,并设置Project Options -> Building -> Delphi Compiler -> Output directory 为 ..RuntimeVcls
并设置 run -> Parameters -> Debugger ->
Browse 为 ..RuntimeDeWebServer.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;
原文地址:https://www.cnblogs.com/maxxua/p/15505621.html