重要我正在使用Delphi XE 7
我是数据快照的新手,我在菜单中设置了一个数据快照服务器和客户端,旁边是youtube的简短教程
服务器和客户端应用程序相互协作。但是在我的服务器方法单元(包含客户端可以调用的所有函数的单元)中我试图初始化我在类中创建的变量(将一些整数设置为0等)。
我试图覆盖constructor create
,但似乎永远不会被调用。
我已使用virtual
,override
和overload
对其进行了标记,但它们似乎都没有执行此代码:
constructor TServerMethods1.create(AOwner: TComponent);
begin
messagedlg('worked', mtError, [mbOk], 0);
inherited;
end;
我原本在那里有变量,但我发现它没有执行。 我错过了什么或者它永远不会执行,如果它永远不会执行客户端如何调用方法。
编辑 - 这是类声明:
type
tPlayer = record
PlayerName: String;
Spot: Integer;
end;
{$METHODINFO ON}
TServerMethods1 = class(TComponent)
TmrGameStarted: TTimer;
private
{ Private declarations }
fSpot1Taken: Boolean;
fSpot2Taken: Boolean;
fSpot3Taken: Boolean;
fSpot4Taken: Boolean;
fSpot5Taken: Boolean;
Player: Array [1 .. 5] of tPlayer;
fGameStarted: Boolean;
public
{ Public declarations }
fPlayerCount: Integer;
constructor create(AOwner: TComponent); overload;
function getPlayerCount: Integer;
procedure setPlayerCount(i: Integer);
function EchoString(Value: string): string;
function ReverseString(Value: string): string;
function Attempt_Join(sPlayerName: String; sPassword: String): String;
function UpdateLog: String;
function GameStarted: String;
end;
{$METHODINFO OFF}
我还在constructor
中添加了以下内容:
constructor TServerMethods1.create(AOwner: TComponent);
begin
messagedlg('worked', mtError, [mbOk], 0);
inherited create(AOwner);
end;
这是来自constructor
的{{1}}方法,它是公开声明System.Classes
constructor Create(AOwner: TComponent); virtual;
这也在类型声明中添加,但我不知道它做什么
{ TComponent }
constructor TComponent.Create(AOwner: TComponent);
begin
FComponentStyle := [csInheritable];
if AOwner <> nil then AOwner.InsertComponent(Self);
end;
构造方法:
private class var
FComparer: IComparer<TComponent>;
class constructor Create;
答案 0 :(得分:0)
好。我找到了问题的答案。 on create甚至触发,但每次客户端调用函数时都会触发。
在做了一些更多的研究后,似乎没有一种实际的方法可以从表单或应用程序中操作服务器方法。
根据您的需要,Datasnap可能很有用。在我的情况下,我以不正确的方式使用它。要使用create构造函数,只需添加override指令即可。这将覆盖默认的父构造函数并执行您的构造函数。