DataSnap Rest 主窗体怎么引用其它 单元的 控件。

jwb_99 2019-03-14 02:59:39
为什么DataSnap Rest 无法引用其它 单元的 控件。
DataSnap Sever却可以?

一:
向导生成DataSnap Rest后,产生了三个单元:
1、FormUnit1.pas(主窗体单元),
2、WebModuleUnit1.pas(该单元,自动产生了DSServer1,DSServerClass1,及其控件它)
3、ServerMethodsUnit1.pas(可以自己放数据库控件的单元)

现在想在 主窗体单元 引用 WebModuleUnit1中的DSServer1控件
已经Uses WebModuleUnit1.pas,但就是无法引用控件,说没定义。


二:但在DataSnap Sever却能引用?
向导生成DataSnap Sever后,也产生了三个单元:
1、Unit1.pas(主窗体单元),
2、ServerContainerUnit1.pas(该单元,自动产生了DSServer1,DSServerClass1,及其控件它)
3、ServerMethodsUnit1.pas(可以自己放数据库控件的单元)

我在主单元,Uses ServerContainerUnit1 单元后
就可以引用该单元的DSServer1。

三:
我发现它们2单元区别:
ServerContainerUnit1单元
var
ServerContainer1: TServerContainer;

WebModuleUnit1单元
var
WebModuleClass: TComponentClass = TWebModule1;

是因为多了TComponentClass才不能被引用吗?
...全文
232 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lao_yunger 2019-03-21
  • 打赏
  • 举报
回复
procedure TWebModule1.WebModuleCreate(Sender: TObject);
begin
WM:=TWebModule1.CREATE(SELF);>>>>>>>>>>>>>不是重复了嘛,可以尝试在主窗口里创建
FServerFunctionInvokerAction := ActionByName('ServerFunctionInvokerAction');
end;
jwb_99 2019-03-15
  • 打赏
  • 举报
回复
引用 3 楼 qq_457565758 的回复:
VAR
WM:TWebModule1;




BEGIN

WM:=TWebModule1.CREATE(SELF);
WM......
END;


用了这方法加在本单元,但运行时引用就出错,
你帮看下,谢谢

procedure TWebModule1.WebModuleCreate(Sender: TObject);
begin
WM:=TWebModule1.CREATE(SELF);
FServerFunctionInvokerAction := ActionByName('ServerFunctionInvokerAction');
end;

lao_yunger 2019-03-15
  • 打赏
  • 举报
回复
VAR
WM:TWebModule1;




BEGIN

WM:=TWebModule1.CREATE(SELF);
WM......
END;
jwb_99 2019-03-14
  • 打赏
  • 举报
回复
引用 1 楼 BlueStorm 的回复:

//Delphi主菜单->Project-ViewSouce:
Program Project1; //DataSnap Rest
{$APPTYPE GUI}

{$R *.dres}

uses
Vcl.Forms,
Web.WebReq,
IdHTTPWebBrokerBridge,
FormUnit1 in 'FormUnit1.pas' {Form1},
ServerMethodsUnit1 in 'ServerMethodsUnit1.pas',
WebModuleUnit1 in 'WebModuleUnit1.pas' {WebModule1: TWebModule};

{$R *.res}

begin
if WebRequestHandler <> nil then //DataSnap Rest
WebRequestHandler.WebModuleClass := WebModuleClass; //没有生成WebModule1,甚至没有定义这个变量
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.


//-----------------------------------------------------------------------------------------------

//Delphi主菜单->Project-ViewSouce:
program Project2; //DataSnap Sever

uses
Vcl.Forms,
Web.WebReq,
IdHTTPWebBrokerBridge,
Unit2 in 'Unit2.pas' {Form2},
ServerMethodsUnit1 in 'ServerMethodsUnit1.pas',
ServerContainerUnit1 in 'ServerContainerUnit1.pas' {ServerContainer1: TDataModule};

{$R *.res}

begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm2, Form2); //DataSnap Sever
Application.CreateForm(TServerContainer1, ServerContainer1); //有生成ServerContainer1
Application.Run;
end.



谢谢,高手,
那要怎么才能DataSnap Rest 也能调用


program Project36;
{$APPTYPE GUI}

{$R *.dres}

uses
Vcl.Forms,
Web.WebReq,
IdHTTPWebBrokerBridge,
FormUnit1 in 'FormUnit1.pas' {Form1},
ServerMethodsUnit1 in 'ServerMethodsUnit1.pas' {ServerMethods1: TDataModule},
WebModuleUnit1 in 'WebModuleUnit1.pas' {WebModule1: TWebModule};

{$R *.res}

begin

{2、
这2句又无法运行,E2010 Incompatible types: 'TComponentClass' and 'TWebModule1'
所以我把它去除了,有什么影响吗
或有办法让它能运行,又能引用吗}
// if WebRequestHandler <> nil then
// WebRequestHandler.WebModuleClass := WebModuleClass;
Application.Initialize;
Application.CreateForm(TForm1, Form1);

{1、这句是我新加的,改了后,还是不能调用。
所以我把 WebModuleUnit1单元的
WebModuleClass: TComponentClass = TWebModule1;
改成
WebModuleClass: TWebModule1;就可以引用。但上面那2句又不能运行了}
Application.CreateForm(TWebModule1, WebModuleClass);

Application.Run;
end.


//以下是WebModuleUnit1.pas============================

var
//WebModuleClass: TComponentClass = TWebModule1;

{上面那句是原来,下面是我改的。
我把 TComponentClass = 删除,才能调用,
但Project单元说 'TComponentClass' and 'TWebModule1'}

WebModuleClass: TWebModule1;
BlueStorm 2019-03-14
  • 打赏
  • 举报
回复

//Delphi主菜单->Project-ViewSouce:
Program Project1;  //DataSnap Rest
{$APPTYPE GUI}

{$R *.dres}

uses
  Vcl.Forms,
  Web.WebReq,
  IdHTTPWebBrokerBridge,
  FormUnit1 in 'FormUnit1.pas' {Form1},
  ServerMethodsUnit1 in 'ServerMethodsUnit1.pas',
  WebModuleUnit1 in 'WebModuleUnit1.pas' {WebModule1: TWebModule};

{$R *.res}

begin                              
  if WebRequestHandler <> nil then                       //DataSnap Rest
    WebRequestHandler.WebModuleClass := WebModuleClass;  //没有生成WebModule1,甚至没有定义这个变量
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


//-----------------------------------------------------------------------------------------------

//Delphi主菜单->Project-ViewSouce:
program Project2;   //DataSnap Sever

uses
  Vcl.Forms,
  Web.WebReq,
  IdHTTPWebBrokerBridge,
  Unit2 in 'Unit2.pas' {Form2},
  ServerMethodsUnit1 in 'ServerMethodsUnit1.pas',
  ServerContainerUnit1 in 'ServerContainerUnit1.pas' {ServerContainer1: TDataModule};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;   
  Application.CreateForm(TForm2, Form2);                        //DataSnap Sever
  Application.CreateForm(TServerContainer1, ServerContainer1);  //有生成ServerContainer1
  Application.Run;
end.

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧