如何在TMS WEB Core中通过JavaScript调用Delphi过程?
从JavaScript调用Delphi WebForm公共过程的方法
Delphi WebForm的公共过程运行在服务器端,客户端JavaScript无法直接调用,必须通过AJAX回调机制触发执行。以下是具体实现步骤:
一、在Delphi中配置可被JS调用的方法
根据你使用的Web框架选择对应方式:
1. 基于IntraWeb框架
在表单的OnCreate事件中,将目标方法注册为外部可调用的回调:
procedure TfrmMain.IWFormCreate(Sender: TObject); begin // 注册方法:第一个参数是JS中使用的调用名称,第二个是Delphi过程 IWForm.RegisterExternalMethod('CallMyDelphiProc', MyDelphiProcedure); end;
2. 基于Delphi ASP.NET WebForm
给公共过程添加[WebMethod]属性,若需访问实例成员需调整逻辑,静态方法可直接调用:
TfrmMain = class(TWebForm) ... public { Public declarations } [WebMethod] class procedure MyDelphiProcedure(MyParam: UInt64); static; end;
二、在JavaScript中调用方法
1. 动态创建图片的点击事件绑定
给动态生成的图片添加onclick回调:
// 创建图片元素 var dynamicImg = document.createElement('img'); dynamicImg.src = 'your-image-path.png'; // 绑定点击事件 dynamicImg.onclick = function() { // IntraWeb环境调用 IWCallBack.CallBack('CallMyDelphiProc', [1]); // Delphi ASP.NET环境调用 // PageMethods.MyDelphiProcedure(1); }; // 添加到页面 document.body.appendChild(dynamicImg);
2. 任意JS代码中直接调用
// IntraWeb环境 IWCallBack.CallBack('CallMyDelphiProc', [123]); // Delphi ASP.NET环境 PageMethods.MyDelphiProcedure(456);
注意事项
- 确保框架支持AJAX:IntraWeb默认支持;Delphi ASP.NET需在页面添加
ScriptManager组件并启用页面方法。 - 参数类型匹配:JS的
Number对应Delphi的UInt64时,注意数值范围不要溢出。 - 实例成员访问:IntraWeb的回调会关联当前表单实例,可直接访问成员;ASP.NET静态方法无法访问实例成员,需通过其他方式传递上下文。
内容的提问来源于stack exchange,提问作者Shaun Roselt
相关产品推荐
相关产品推荐

