我正在编写自己的组件,我希望它将"db"
个单元添加到interface
uses子句中,只要我将它放在表单上,因为它有一个已发布的事件,如:
TMyDBEvent = procedure(Sender: TObject; DataSet: TDataSet) of object;
TDataSet
在db.pas
中声明,我需要手动添加此单元,我想避免这种情况。
我见过这个解决方案:
How are Delphi units automatically added when a component is added to a form?
而且:
Can I make a custom Delphi component add multiple units to the uses clause?
使用RegisterSelectionEditor
,但Delphi 5(我知道......)似乎没有这个单位。
我有什么选择?
答案 0 :(得分:2)
您可以使用相同的名称为组件单元中的类型添加别名:
type
TDataSet = Db.TDataSet;
每当您将组件放在表单上时,Delphi都应将其单元添加到uses子句中。然后,无论您是否在该表单中使用Db
,都有效TDataSet
与Db
中的<unit-name>.<type-name>
相当。
此类型别名是否会出现任何副作用/影响/冲突问题?
从语言角度来看,没有。
一般来说,当2个代码(有时甚至在同一单元内)看起来使用相同的类型时,使用同名的类型会导致问题是不明智的,但它们实际上是内部不同的类型。 但是,在这种情况下,类型实际上是相同 。
从IDE的角度来看,并不多。
var userFunc=function (server, options) {
return {
authenticate: function (request, reply) {
console.log('UserAuth');
return reply.continue({ credentials: { user: 'UserAuth' } });
}
};
};
server.auth.scheme('UserAuthScheme', userFunc); // here
server.auth.strategy('UserAuth', 'UserAuthScheme'); // here
server.route([{
method: 'POST',
path: '/api/user/loginDetails',
config: {
auth: 'UserAuth',
handler: function (request, reply) {
reply('/api/user/loginDetails');
},
validate: {
payload: {
},
headers: UniversalFunctions.authorizationHeaderObj,
failAction: UniversalFunctions.failActionFunction
},
plugins: {
'hapi-swagger': {
payloadType: 'form',
responses: Config.APP_CONSTANTS.swaggerDefaultResponseMessages
}
}
}
}]);
时,某些版本的Delphi偶尔会遇到代码完成的困难。 (我不记得Delphi 5是如何(或者甚至是)受到影响的。)是否还有其他已知组件使用此技巧?
我不知道使用该技术的任何组件。但是我在很多场合出于各种原因使用了混叠。主要是为了避免对客户端单元施加连锁依赖。